filipesq Temat założony przez niniejszego użytkownika |
Szukanie ciągu zanków w tekście ignorując wielkość liter » 2010-06-12 18:51:41 Witam, otóż piszę pewien program i potrzebuje znaleźć słowo np. "string" w tekście, który poda użytkownik. Normalnie zrobiłbym tak: if( tekst.find( "string" ) != 0xFFFFFFFF ) { }
Jednak jeśli użytkownik wpisze np. "String", "StRing", "strinG", czy "STRING", program nie znajdzie takiego słowa, ponieważ zwraca uwagę na wielkość liter. Mam kilka pomysłów jak rozwiązać mój problem, ale żadnego nie umiem wprowadzić w życie: - Użyć jakiegoś odpowiednika "find()" (o ile taki jest), który ignorowałby wielkość liter - Zamienić wszystkie litery w tekście na małe albo duże (chyba da się tak zrobić) - Może wy pomożecie... |
|
ison |
» 2010-06-12 19:11:07 ehhh, tak trudno pokombinować trochę? :) tu masz program zamieniający wszystkie duże znaki na małe #include <iostream>
int main() { char a[ 100 ]; scanf( "%s", a ); for( int q = 1; q <= strlen( a ); q++ ) if( a[ q - 1 ] >= 'A' && a[ q - 1 ] <= 'Z' ) a[ q - 1 ] += 'a' - 'A'; printf( "%s\n", a ); }
|
|
michalp |
» 2010-06-12 19:11:24 Może użyj algorytmu search z predykatem porównującym, który pominie wielkość znaków. @up: Nie skompiluje się. Pomyśl dlaczego. |
|
ison |
» 2010-06-12 19:16:21 @up to ciekawe panie ekspercie, jak ty to robisz że w głowie masz lepszy kompilator od G++? hmmm... mi jakoś kompiluje, chyba mam zepsuty kompilator :D a myśleć dlaczego nie muszę, od tego są logi compilera. Jeśli korzystasz z microsoft'owego badziewia to się nie dziw że masz błędy. |
|
filipesq Temat założony przez niniejszego użytkownika |
» 2010-06-12 19:36:42 Niby działa, ale po wstawieniu zamiast char a[100], string a[100] nie chce się skompilować... |
|
ison |
» 2010-06-12 19:41:31 po pierwsze: jesli robsiz string[100]; to robisz tablicę ciągów znaków czyli jeśli chcesz się dostać do pojedynczego znaku to traktujesz to jako tablice 2-wymiarową np. nazwa[0][0]; w moim programie pisałem char[100] gdyż char to pojedynczy znak, więc jeśli chcę mieć słowo to muszę mieć wiele zmiennych typu char, a string sam w sobie jest słowem tu masz to samo tylko że na STL'owych stringach: #include <iostream>
using namespace std;
int main() { string a; cin >> a; for( int q = 1; q <= a.length(); q++ ) if( a[ q - 1 ] >= 'A' && a[ q - 1 ] <= 'Z' ) a[ q - 1 ] += 'a' - 'A'; cout << a << endl; }
|
|
Elaine |
» 2010-06-12 19:44:57 ison, nie pajacuj. Twój kod jest błędny, używasz printf/scanf bez dołączania stdio.h (iostream tego nie implikuje), kompiluje się tylko z powodu kiepskiego systemu modułów w C++ oraz takiej a nie innej implementacji biblioteki standardowej.
Swoją drogą - kompilator Microsoftu jest bardzo dobry, to nie GCC, które cały czas ma problemy ze zgodnością ze standardem... |
|
ison |
» 2010-06-12 19:48:38 nigdy się jeszcze nie spotkałem aby gdziekolwiek iostream nie zawierał również standardowych funkcji typu printf. Aczkolwiek to jest możliwe, zwracam honor jeśli dla kogoś to jest takie istotne ;) |
|
« 1 » 2 |