• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porównanie znaków w łańcuchu string C++

Object Storage Arubacloud
0 głosów
4,847 wizyt
pytanie zadane 11 grudnia 2018 w C i C++ przez Draq Nowicjusz (160 p.)

Witam, piszę sobie program do upodabniania słów. Na wejściu dostajemy długość wyrazów, wyraz1 i wyraz2. Po przejściu przez algorytm wyraz2 ma się równać wyraz1, czyli program dostaje:

2

asd

das

wyjście:  asd

Niestety operator "==" nie działa w przypadku typu string a przekonwertować na char się nie da z tego co wiem. Czy mogę prosić o podpowiedź?

 


string word_assimilation(string tab1, string tab2, int w_longitude)
{
string *replacement = new string[w_longitude];
	while (tab2!=tab1)
	{
		for (int i = 0; i < w_longitude; i++)
		{
			if (tab2[i] != tab1[i])
			{
				replacement[i] = tab2[i];
				tab2[i] = '\0';
			}
		}

		for (int i = 0; i < w_longitude; i++)
		{
/*->tu mam problem*/ if (replacement[i] == tab1[i]) 
			{
				tab2[i] = replacement[i];
			}
		}
	}
	return tab2;
}

 

komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)
Przy okazji, nie rozumiem dlaczego działa operator != w przypadku string ale == już nie..

2 odpowiedzi

0 głosów
odpowiedź 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)
Nie rozumiem do konca co robisz. Jesli chcesz "upodobnic" wyrazy do siebie cvzyli sprawic aby wyraz 2 był taki sam jak wyraz 1 oraz korzystasz z string to czemu nie zrobisz wyraz2 =wyraz1;  ?
komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)
Dlatego że wg polecenia muszę to zrobić po przez przesuwanie znaków i potem zliczyć przesunięcia, ale zliczenie to nie problem
komentarz 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)

Program wyrzuca jakiś bład?

if (replacement[i] == tab1[i]) 

takie porównanie jest ok

komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)

Jak na screenie:

komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)
A może to przez to że wstawiam '\0' w poprzedniej pętli? i dlatego czyta jako char?
komentarz 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)

Problem jest w tym:

string *replacement = new string[w_longitude];

tutaj tworzysz tablice stringow. A potem w linijce :

tab2[i] = replacement[i];

Probojesz przypisac tab2[i] ktory jest charem replacement[i] ktory jest stringiem.

To wywyalil ci kompilator

komentarz 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)
No i porownanie o ktorym mowisz tez jest string == char

Wczesniej nie zwrociłem uwagi ze replacement jest tablica string
komentarz 11 grudnia 2018 przez Draq Nowicjusz (160 p.)
OK, rozumiem. Muszę więc poszukać jak wyciąć char z tablicy bo nie mam na to pomysłu. Myślałem że przypisuje tylko wartość o wskazanym indeksie. Dziękuje!
komentarz 11 grudnia 2018 przez jankowa1ski Gaduła (3,560 p.)
Co masz na mysli jak wyciagnac char z tablicy?

Jesli to tablica charow / string to po prostu:

char znak = wyraz[i];

Tylko ze u cb replacment to nie tablica charow / string tylko tablica stringow w tym wypadku moglbys zrobic tak:

char znak = replacement[i][j];
komentarz 11 grudnia 2018 przez j23 Mędrzec (194,920 p.)

Dlatego że wg polecenia muszę to zrobić po przez przesuwanie znaków i potem zliczyć przesunięcia, ale zliczenie to nie problem

Nie prościej tak:

    std::string s1 = "asd";
    std::string s2 = "das";
    std::string s3 {s2 + s2};
    
    auto p = s3.find(s1);
    if(p != std::string::npos)
        std::cout << "przesuniecie: " << p << '\n';

?

0 głosów
odpowiedź 11 grudnia 2018 przez niezalogowany

Nie można porównać stringa z char. Chyba niepotrzebnie robisz tablicę:

string replacement(w_longitude);

Podobne pytania

0 głosów
1 odpowiedź 1,176 wizyt
0 głosów
1 odpowiedź 147 wizyt
pytanie zadane 18 lipca 2016 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 580 wizyt

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...