Permalänk
Medlem

C++ : Ersätta tecken hjälp

Hej där!

Håller på och lär mig lite c++ och har fått i uppgift att byta ut ett visst tecken mot ett ord. Jag har hållit på ett bra tag med denna men löser den inte. Har läst hur andra gjort men inte lyckats själv. Så jag tar lite hjälp av er tänkte jag.

I texten som står i koden så ska jag byta ut alla "n" mot ordet "hej". Som ni ser har jag försökt med 2st olika sätt men inget fungerar.

#include <iostream> #include <cstring> using namespace std; int main () { locale swedish("swedish"); locale::global(swedish); char ord[] = "Nu är snart julen här, Kom ihåg att vara snäll!, annars är du dum" ; int stegnr=0; int antaln=0; while(ord[stegnr] != 0) { if(ord[stegnr] == 'n') replace(ord.find('n'), "lol"); //replace( ord.begin(), ord.end(), 'n', "lol" ); stegnr++; } cout << ord <<endl; }

De errors jag får är:
Error 1 error C2228: left of '.find' must have class/struct/union c:\users\96nka01\documents\visual studio 2012\projects\win32project3\win32project3\win32project3.cpp 23 1 Win32Project3

Error 2 error C3861: 'replace': identifier not found c:\users\96nka01\documents\visual studio 2012\projects\win32project3\win32project3\win32project3.cpp 23 1 Win32Project3

4 IntelliSense: expression must have class type c:\Users\96nka01\Documents\Visual Studio 2012\Projects\Win32Project3\Win32Project3\Win32Project3.cpp 23 17 Win32Project3

3 IntelliSense: identifier "replace" is undefined c:\Users\96nka01\Documents\Visual Studio 2012\Projects\Win32Project3\Win32Project3\Win32Project3.cpp 23 9 Win32Project3

Vet inte hur jag ska gå vidare...inget verkar fungera! Är tacksam för tips..

/Nicke

Visa signatur

Iphone 11 pro 256GB
Ipad mini 4 16GB
Macbook Pro 13 Touch Bar 256GB

Permalänk

Tror bare du måste lägga till #include <string>

Permalänk
Medlem

<cstring> är samma sak som <string.h>(notera .h) vilket är ett C bibliotek för C strings. <string> är ett C++ bibliotek för C++ strings.

Permalänk
Hedersmedlem

Problemet är att 'n' är en char, dvs ett tecken, och du försöker stoppa in en sträng "lol". Med lösningen du valt, en char array, så måste du utöka arrayen och sedan flytta undan tecknen efter n så att du får plats att ersätta med tre tecken. Annars kommer du att skriva över två tecken efter n med ol.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av giplet:

Problemet är att 'n' är en char, dvs ett tecken, och du försöker stoppa in en sträng "lol". Med lösningen du valt, en char array, så måste du utöka arrayen och sedan flytta undan tecknen efter n så att du får plats att ersätta med tre tecken. Annars kommer du att skriva över två tecken efter n med ol.

Det är jag med på.
Men vet inte riktigt hur jag ska göra..

Ska jag göra en till sträng där "lol finns med, och sedan utgå därifrån? Eller vad är lättast

Skickades från m.sweclockers.com

Visa signatur

Iphone 11 pro 256GB
Ipad mini 4 16GB
Macbook Pro 13 Touch Bar 256GB

Permalänk
Medlem

Jag hade declarerat en sträng som skulle bli slutsträng och sedan loopar igenom den sträng du vill modifierat och om jag hittar ett 'n' så hade jag istället skrivit lol till strängen
Psuedokod:
while !endofstring
{
If (sträng[i] != 'n')
stoppa in i slutsträng
Annars
stoppa in lol istället
i=i+1
}

Permalänk
Medlem

#include <iostream> #include <string> #include <Windows.h> using namespace std; int main () { locale swedish("swedish"); locale::global(swedish); string text = "Nu är snart julen här, Kom ihåg att vara snäll!, annars är du dum" ; while( text.find('n') != string::npos) text.replace(text.find('n'), 1, "lol"); cout << text << endl; while(GetKeyState(VK_ESCAPE) > -1) Sleep(10); return 0; }

Dold text
Permalänk
Medlem
Skrivet av MrSir:

#include <iostream> #include <string> #include <Windows.h> using namespace std; int main () { locale swedish("swedish"); locale::global(swedish); string text = "Nu är snart julen här, Kom ihåg att vara snäll!, annars är du dum" ; while( text.find('n') != string::npos) text.replace(text.find('n'), 1, "lol"); cout << text << endl; while(GetKeyState(VK_ESCAPE) > -1) Sleep(10); return 0; }

Dold text

Tack så mycket!! Äntligen!

Men vad är det string::npos gör?
"npos" betyder väll "no position"?
När den hittar ett 'n' så går programmet vidare till "text.replace" och sedan byter ut 'n' mot "lol"? Är det rätt beskrivet?

Visa signatur

Iphone 11 pro 256GB
Ipad mini 4 16GB
Macbook Pro 13 Touch Bar 256GB

Permalänk

#include <iostream>
#include <regex>

int main()
{
std::locale swedish("swedish");
std::locale::global(swedish);

std::string test = "Nu är snart julen här, Kom ihåg att vara snäll!, annars är du dum";
test = std::regex_replace(test, std::regex("n+"), "lol");
std::cout << test << std::endl;

return 1;
}