Ponownie witam wszystkich serdecznie :)
Tym razem pojawił się kłopot również w zadaniu z książki Szkoły Programowania Stephana Prata, a mianowicie....
Napisz program korzystający z tablicy char, odczytujący w pętli słowo po słowie, aż do wpisania gotowe. Następnie program powinien pokazywać liczbę podanych słów (poza gotowe). Przy porównaniach użyć funkcji strcmp() i pliku nagłówkowego cstring.
Generalnie zadanie rozwiązałem, ale po swojemu, a nie tak jak autor sobie życzył.
Oto kod :
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char tekst[256];
char klucz[7]="gotowe";
char *pt;
char *ps;
int a,b;
pt = klucz;
bool index = 1;
int licznik = 0;
cout << "Podaj slowa (kiedy skonczysz napisz \"gotowe\")" << endl;
do
{
cin.get(tekst,256).get();
ps = strtok(tekst," ,.-");
while (ps != NULL)
{
a=*ps;
b=*pt;
ps = strtok(NULL, " ,.-");
if(a==b) index = 0;
if(index==1)licznik++;
}
} while (index != 0);
cout << endl << "Ilosc wyrazow: " << licznik << endl;
return 0;
}
Jak widać program działa, ale bez funkcji strcmp().
Oto kod z wymaganą w treści zadania funkcją, ale mi nie działa:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char tekst[256];
char klucz[7]="gotowe";
char *ps;
bool index = 1;
int licznik = 0;
cout << "Podaj slowa (kiedy skonczysz napisz \"gotowe\")" << endl;
do
{
cin.get(tekst,256).get();
ps = strtok(tekst," ,.-");
while (ps != NULL)
{
cout << ps << " = " << klucz << endl;
ps = strtok(NULL, " ,.-");
index = strcmp(ps,klucz); **W TEJ LINII PROGRAM MI SIĘ ZAWIESZA**
if(index==1)licznik++;
}
} while (index != 0);
cout << endl << "Ilosc wyrazow: " << licznik << endl;
return 0;
}
Znajdzie się chętna osoba, do wyjaśnienia dlaczego strcmp() zawiesza mi program, jeśli wprowadzane są takie same wartości char? T
http://www.cplusplus.com/reference/cstring/strcmp/?kw=strcmp
W przykładzie na stronie również podano wartości char.
Pozdrawiam.