Owex Temat założony przez niniejszego użytkownika |
Szukanie słowa za pomocą strcmp » 2010-12-29 11:25:19 Witam. Dopiero zaczynam się uczyć C++, a ponieważ teraz mam dużo wolnego czasu, więc próbowałem kombinować z pętlami, tablicami i komendą strcmp. I właśnie z tym mam problem. Wiem że komenda strcmp może "znaleźć" odpowiednią literę na podstawie porównywania słów. Ale czy może znaleźć całe zdanie? (lekcja http://kursy.ddt.pl/?LessonId=10, podpunkt 8.3.3) Mam kod: #include <iostream> #include <conio.h> using namespace std; int main() { const int MAX = 50; char SLOWO[ MAX ] = "???? ??? ???"; for( char znak = 'a'; strcmp( SLOWO, "ucze sie c++" ); znak++ ) { cout << SLOWO << endl; SLOWO[ 0 ] = znak; SLOWO[ 1 ] = znak; SLOWO[ 2 ] = znak; SLOWO[ 3 ] = znak; SLOWO[ 4 ] = znak; SLOWO[ 5 ] = znak; SLOWO[ 6 ] = znak; SLOWO[ 7 ] = znak; SLOWO[ 8 ] = znak; SLOWO[ 9 ] = znak; } cout << "\n\n\n\n Szukane zdanie to " << SLOWO << ".\n\n\n\n"; cout << " ***Nacisnij ENTER by zakonczyc...***"; getchar(); return 0; } Kiedy uruchamiam komputer zaczyna "piszczeć" :D Co jest źle? |
|
malan |
» 2010-12-29 11:45:22 No to pojechałeś :D. #include <iostream>
const int SENTENCES_COUNT = 4;
int main() { char * sentencesArray[] = { "Ucze sie C++ od dwoch lat.", "Mam na imie Jozef", "Mam 13 lat", "Dzis mam zly humor" }; char sentence[ 30 ] = { '\0' }; std::cout << "Jakie zdanie chcesz wyszukac? " << std::endl; std::cin.getline( sentence, 30 ); for( int i = 0; i < SENTENCES_COUNT; i++ ) { if( strncmp( sentence, sentencesArray[ i ], strlen( sentence ) ) == 0 ) { std::cout << "Znalazlem zdanie: " << sentencesArray[ i ] << ", (" << i << ")"; break; } } std::cin.sync(); std::cin.get(); return 0; } Jeżeli chciałbyś wyszukać jakiś podciąg w zdaniu, to zainteresuj się std::string::find. |
|
Owex Temat założony przez niniejszego użytkownika |
» 2010-12-29 11:51:32 Jakiś skomplikowany ten kod... połowy komend nawet nie znam, a mi chodziło o to czy da się za pomocą strcmp znaleźć całe zdanie, oraz jak to zrobić bo mi wychodzi błąd. A swoją drogą to mam jeszcze jeden problem, ale tym razem z mnożeniem i dzieleniem w pętli for. Daję kod: #include <conio.h> #include <iostream> using namespace std; int main() { int a = 1; for( a; a < 27; a * 3 ) { cout << a << ','; } getchar(); return 0; } 1,3,9,27, wychodzi mi 1,1,1,1,1(...). Dlaczego? |
|
ison |
» 2010-12-29 11:55:49 bo a się nie zmienia prędzej a *= 3 a nie a * 3 |
|
malan |
» 2010-12-29 11:57:57 a mi chodziło o to czy da się za pomocą strcmp znaleźć całe zdanie |
Jeżeli chodzi Ci o coś takiego: char sentence[] = "To jest jakis piekny monolog, zbudowany z kliku zdan. Pisze go tylko dla przykladu. Jestem bardzo glodny... i chce mi sie slodkiego. Ale ladna pogoda."; char sentenceSerch[] = "Pisze go tylko dla przykladu";
if( strcmp( sentence, sentenceSerch ) == 0 )...
To nie. strcmp porównuje, a nie szuka :). |
|
Owex Temat założony przez niniejszego użytkownika |
» 2010-12-29 14:42:12 Ale mi chodzi właśnie o porównywanie, ale więcej niż jednego znaku. Tak jak w przykładzie:
#include <iostream> #include <conio.h> #include <cstring>
int main() { using namespace std; const short MAX_ZNAKOW = 16; char slowo[ MAX_ZNAKOW ] = "Program?j w C++"; for( char znak = 'a'; strcmp( slowo, "Programuj w C++" ); znak++ ) { cout << slowo << endl; slowo[ 7 ] = znak; } cout << "\nSzukana litera to, \"" << slowo[ 7 ] << "\"" << "\nPetla zakonczyla dzialanie prawidlowy wyraz" << " to: " << slowo << endl; getch(); return 0; }
Tylko w przykładzie porównywany jest jeden znak i wszystko działa poprawnie. W moim przykładzie (w 1st poście) porównuję więcej znaków, a wtedy program przestaje działać poprawnie. Dlaczego? I czy komendą strcmp da się porównywać więcej niż jeden znak?
I nowy problem: Piszę tutaj żeby nie zakładać nowego tematu. Na tej stronie http://kursy.ddt.pl/?LessonId=10 ostatnie ćwiczenie polega na tym, żeby zrobić program księgowy (szczegóły przeczytajcie sami- jest to na samym dole strony). Ja mam kod:
#include <iostream> #include <conio.h> using namespace std; int main() { const int KWARTALY = 5; const int LATA = 4; const char tab1[ KWARTALY ][ LATA ] = { { ' ', 1999, ' ', 2000 }, { 1, 2075000, ' ', 532500 }, { 2, 2205000, ' ', 479250 }, { 3, 2150000, ' ', 1479250 }, { 4, 1065000, ' ', 1229250 }, }; cout << " Firma DDT\n" << " *Program ksiegowy*\n"; for( int X = 0; X < KWARTALY; X++ ) { cout << tab1[ X ] << endl; } cin.get(); getchar(); return 0; }
Zamiast tabeli wychodzą mi bezsensowne znaki (sami zobaczcie). Co zrobić? Nie chcę innych komend niż pętli for i tablic dwuwymiarowych(tego co użyte w przykładzie powyżej). Co zrobić żeby wyszła ta tabela? |
|
DejaVu |
» 2010-12-29 15:36:32
Reasumując: złej funkcji używasz do szukania podciągu znaków w tekście.
/edit:
Jeden temat = jeden problem. |
|
« 1 » |