Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szukanie ciągu zanków w tekście ignorując wielkość liter

Ostatnio zmodyfikowano 2010-06-12 19:59
Autor Wiadomość
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:
C/C++
if( tekst.find( "string" ) != 0xFFFFFFFF )
{
    //Program znalazł słowo "string"
}
 
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...
P-17958
ison
» 2010-06-12 19:11:07
ehhh, tak trudno pokombinować trochę? :)

tu masz program zamieniający wszystkie duże znaki na małe
C/C++
#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 );
}
P-17959
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.
P-17960
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.
P-17961
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ć...
P-17964
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:
C/C++
#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;
}
P-17965
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...
P-17966
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 ;)
P-17967
« 1 » 2
  Strona 1 z 2 Następna strona