Zmiana słowa na znak

0

Cześć,
Nie mam pomysłu na rozwiązanie funkcji, które dla podanego łańcucha S o długości N zastępuje wszystkie wystąpienia "plus" przez "+" i wszystkie wystąpienia "minus" przez "-".

Próbowałam przy użyciu funkcji, na samym początku zmienić samo słowo "plus" na znak.

replace(S.begin(), S.end(), 'p', '+');

Nie działa i nie wiem jak to poprawić, żeby czytało słowo.

0

Możesz napisać od ręki — std::find, std::errase, std::insert; możesz wykorzystać std::regex_replace. Niczego pośredniego (gotowej funkcji, ale bez wyrażeń regularnych), z tego co wiem, w std nie ma. Jest w Boost, ale to inna historia…

0

Jesli rozwojowo, większa ilość słów do zamiany itd to

std::map<char,std::string>
std::map<std::string,char>

Za char by trzeba użyć właściwego typu

0

Jakiś czas temu (w początkach nauki C++) potrzebowałem zwykły "znajdź i zamień" na std::string i wykombinowałem coś takiego (już nie pamiętam, czy takiego gotowca pobrałem, czy poskładałem sam):

void StringReplace(string &str, const string &oldStr, const string &newStr)
{
    size_t pos = 0;
    while((pos = str.find(oldStr, pos)) != std::string::npos)
    {
       str.replace(pos, oldStr.length(), newStr);
       pos += newStr.length();
    }
}

str - obrabiany tekst (jest modyfikowany).
oldStr - wyszukiwany napis.
newStr - napis zastępujący każde wystąpienie wyszukanego.

string SomeText = "Jakis napis ze slowami plus i minus, w ktorym minus zastepujemy znakiem -, a plus zastepujemy znakiem +.";
StringReplace(SomeText, "plus", "+");
StringReplace(SomeText, "minus", "-");
cout << SomeText << endl;
1

Jak się zastanowić, to trzeba sobie zadać ważne pytania dodatkowe.
Np czy informacja jest ztokenizowana, podzielona na słowa, tak jakby było w czymś a'la kalkulator w jakimś uproszcznym jezyku programownaia (DSL)

Czy "kataplus" to też "plus", czy nie. Pomysły powyżej pracują w trybie "masowym" - gdy samo użycie w temacie słowa "słowo" zakłada już przetworzenie informacji.

std::map<std::string,char> map;
map["plus"] = '+';
map["minus"] ='-';

string token = ... 
if(map.count(token)>0)
{
   cout << map[token];
}
else
{
  cout << token;
}

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