• 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++

VPS Starter Arubacloud
0 głosów
4,801 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,144 wizyt
0 głosów
1 odpowiedź 145 wizyt
pytanie zadane 18 lipca 2016 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 532 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...