Modyfikowanie napisu

0

Witam mam do zrobienia program :
Mając dany napis . Dozwolone są na nim następujące operacje:
⦁ Z a b - zamień w napisie  wszystkie wystąpienia literki a na literkę b,
⦁ D c - doklejenie na końcu napisu  literki c,
⦁ U n - usunięcie z napisu   końcowych literek,
⦁ N - zakończenie modyfikowania napisu.
Możesz założyć, że a, b, c będą małymi literkami alfabetu angielskiego. Zadaniem Twojego programu jest dla danego napisu  stwierdzić jaki napis powstanie z niego po wykonaniu podanego ciągu modyfikacji. Modyfikacje wykonujemy w dokładnie takiej kolejności w jakiej zostały podane.
Zadanie
Napisz program, który:
⦁ wczyta ze standardowego wejścia napis  oraz kolejne operacje wykonywane na tym napisie,
⦁ wypisze na standardowe wyjście napis powstały po wykonaniu tych operacji.
Wejście
W pierwszej linii wejścia znajduje się napis , którego długość jest niemniejsza niż  i nie przekracza . W drugiej linii znajduje się ciąg operacji zakończony operacją N. Liczba operacji nie przekracza . Ponadto gwarantujemy, że po każdej operacji długość napisu będzie niemniejsza od  i nie większa niż  .
Wyjście
W jedynym wierszu wyjścia należy wypisać napis powstały z napisu  po tym ciągu modyfikacji.
Przykład
Dla danych wejściowych:
main
Z i l U 1 D w D a N
poprawną odpowiedzią jest:
malwa

Oto mój kod :

#include <iostream>
#include <string>
using namespace std;
int main() 
{
  string s;
  int i;
  char a,b,n,c,operacja;
  cin >> s;
  while (cin >> operacja) 
  {
    if (operacja=='Z') 
	{
      cin >> a >> b;
      for (i=0;i<s.length(); i++) 
	  {
        if (s[i]==a) 
		{
          s[i]=b;
        }
      }
    }
    else if (operacja=='D') 
	{
      cin>>c;
      s+=c;
    }
    else if (operacja=='U') 
	{
      cin>>n;
      s.erase(s.length()-n);
    }
    else if (operacja=='N') 
	{
      break;
    }
  }
  cout << s << endl;
}

Problem w tym, że podczas sprawdzania tego zadania wyskakuje mi błąd process exited due to signal 6.
Proszę o pomoc, z góry dzięki.

0

cin >> s; wczytuje ciąg znaków do najbliższego znaku białego, np. spacji.
Użyj: https://en.cppreference.com/w/cpp/string/basic_string/getline

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s;
	getline(cin,s);
	for(char operacja;cin>>operacja;)
	{
		if(operacja=='Z')
		{
			char a,b;
			cin>>a>>b;
			for(char &ch:s) if(ch==a) ch=b;
		}
		else if(operacja=='D')
		{
			char c;
			cin>>c;
			s+=c;
		}
		else if(operacja=='U')
		{
			int n;
			cin>>n;
			s.resize(s.length()-n);
		}
		else if(operacja=='N')
		{
			cout<<s<<endl;
			return 0;
		}
	}
}

https://wandbox.org/permlink/iXBZ86rg2nZb4Q1Z

0

Użyłem getline(cin,s); ale dalej nie działa.

[Error] range-based 'for' loops are not allowed in C++98 mode dla for(char &ch:s) if(ch==a) ch=b;
0

Standard C++98 to zaszłość historyczna sprzed 24 łat, założę się że starsza od ciebie. Użyj std::transform

1 użytkowników online, w tym zalogowanych: 0, gości: 1