Skocz do zawartości
chuckie

C++ Łańcuchy Znaków

Rekomendowane odpowiedzi

Mam problem tzn nie wiem jak sie za to zabrać, a na sieci tego jest bardzo mało.

Chcę napisać program który po wpisaniu jakiegoś zdania/wyrazu wyszukiwał mi samogłoski: a, c, i, u, o, y.

następnie wyświetlił ile ich znalazł . Możliwe jest wykorzystanie string.h. Jak ktoś wie to niech pomoże: napisać program czy jakieś podpowiedzi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

int i =0;int licz = 0;while (s[i] != '/0'){  if ((s[i] == 'a') || (s[i] == 'c') || (s[i] == 'i') || (s[i] == 'u') || (s[i] == 'o') || (s[i] == 'y'))    licz++;  i++;}

ufam ze zadasz sobie trud wprowadzenia zdania samodzielnie :|, aha - nie chrzan ze o tym nie ma na necie

Edytowane przez ayem

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Bo nie ma. mmmmm są łańcuchy ale mojego problemu nie znalazłem. Dobra program napisałem

sam i działa:

 

#include <iostream>#include <stdlib.h>#include <string.h>using namespace std;int main(){	int la=0, lc=0, li=0, lu=0, lo=0, ly=0;	int i;	char *znak;	cin >> znak;	for(i=0; i<strlen(znak); i++)	{  switch(znak[i])  { 	 case 'a': la++; 	 break; 	 case 'c': lc++; 	 break; 	 case 'i': li++; 	 break; 	 case 'u': lu++; 	 break; 	 case 'o': lo++; 	 break; 	 case 'y': ly++; 	 break; 	   }	}	cout << "Ilosc liter a:\t" << la << endl;	cout << "Ilosc liter c:\t" << lc << endl;	cout << "Ilosc liter i:\t" << li << endl;	cout << "Ilosc liter u:\t" << lu << endl;	cout << "Ilosc liter o:\t" << lo << endl;	cout << "Ilosc liter y:\t" << ly << endl;	return 0;}

i wszystko byłoby ok gdyby nie to że jak napisze jeden wyraz to pokazuje mi prawidłową liczbe literek ale na końcu pokazuje sie napis: Segmentation fault. Natomiast gdy napisze 2 wyrazy to podlicza mi z tego pierwszego a z drugiego już nie... ale za to ten komunikat: Segmentation fault znika..... Jakaś pomoc?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#include <stdio.h>int main( void ) {    char litera;    int licznik=0;    while(litera!='\n') {        litera = getchar();        if(litera == 'a' || litera == 'e' || litera == 'i' || litera == 'o' || litera == 'u') {            printf("%c", litera);            licznik++;        }    }    printf("\n liczba samoglosek %d", licznik);    getchar();}  

napisalem w C, bo C++ nie umiem, ale przeciez te jezyki sa blizniaczo podobne, wiec powinienes dac rade :)

Edytowane przez MeHow

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#include <iostream>#include <stdlib.h>#include <string.h>using namespace std;int main(){int la=0, lc=0, li=0, lu=0, lo=0, ly=0;int i=0;char znak[i];cin >> znak;while(znak[i]!='\0'){ switch(znak[i]) {  case 'a': la++;  break;  case 'c': lc++;  break;  case 'i': li++;  break;  case 'u': lu++;  break;  case 'o': lo++;  break;  case 'y': ly++;  break;  } i++;}cout << "Ilosc liter a:\t" << la << endl;cout << "Ilosc liter c:\t" << lc << endl;cout << "Ilosc liter i:\t" << li << endl;cout << "Ilosc liter u:\t" << lu << endl;cout << "Ilosc liter o:\t" << lo << endl;cout << "Ilosc liter y:\t" << ly << endl;system("PAUSE");return 0;}

Program jako taki jest, mój problem tkwi w tym że nie podlicza mi liter po spacji tzn zrobiłem sobie inny program żeby sprawdzić jak literki mi podświetla tzn żeby wyświetlił w pętli while wszystkie literki, co sie okazuje spacje while traktuje jako \0 :? . Drugim problemem jest to że nie moge dawać dłuższych wyrazów jak 10 liter by mi podliczyło paprawnie samogłoski lub jeśli użyje 16 liter to mi wogóle nie podlicza, Jeśli użyje więcej jak 16 liter wyskakuje błąd :-| Prosze o jakieś pomoce w związku z tym...

Edytowane przez chuckie

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dobra sam sobie pomogłem: O to działający program:

 

#include <iostream>#include <stdlib.h>using namespace std;int main(){int la=0, lc=0, li=0, lu=0, lo=0, ly=0;int i=0;char znak[254];cin.getline(znak,254);while(znak[i]!='\0'){ switch(znak[i]) {  case 'a': la++;  break;  case 'c': lc++;  break;  case 'i': li++;  break;  case 'u': lu++;  break;  case 'o': lo++;  break;  case 'y': ly++;  break;  } i++;}cout << "Ilosc liter a:\t" << la << endl;cout << "Ilosc liter c:\t" << lc << endl;cout << "Ilosc liter i:\t" << li << endl;cout << "Ilosc liter u:\t" << lu << endl;cout << "Ilosc liter o:\t" << lo << endl;cout << "Ilosc liter y:\t" << ly << endl;system("PAUSE");return 0;}
Edytowane przez chuckie

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To jest takie odwołanie sie do "standardowej przestrzeni nazw" rozwiązanie przyjęte w 1998 roku po końcowej standaryzacji C++. Poprostu jeśli masz kompilator zgodny z Ansi C++ to możesz sobie napisać using namespace std ;

żeby potem nie pisać i nie wywoływać sobie cały czas metod std , np std::cout .... std::cin.... i tak dalej.

Jeśli kompialtor tego nie rozumie to znaczy że nie jest zgodny ze standardem.

Napisz jaki masz kompilator nazwa i wersja.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mój kompilator to Turbo C++ For Windows v.3.1

i tego mi właśnie nie chce skompilować jeśli to jakiś problem to może powiedzcie co zamiast tego można zrobić a jeśli to też będzie problem to nic nie piszcie może w jakimś topicu uda mi się znaleźć o tym. Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sądząc po sprzęcie to sugeruje ci żebyś zainstalował se linuksa jakiegoś z pakietów jak debian tzn weś ściągnij se płytke z podstawowym systemem, a reszte z netu dociągniesz. Takim sposobem będziesz na czasie z nimi i będziesz miał pełną kontrole nad ilością miejsca na dysku. A jako środowisko proponuje fluxboxa B)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mam Mandrake 10.0 może to nie najlepszy wybór ale narazie nie chce mi się przerabiać na innego Linuxa np. Slackware może potem a tymczasem może zaproponuj mi (jeśli możesz) jakiś kompilator C++ pod windows. Pozdrawiam i dzięki.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

myśle że dobrym był by kompilator ze środowiskiem Dev-C++ :huh: ? tylko nie wiem czy na win 3.1 będzie chodził, Ewentualnie dobrym był by djgpp razem z rhide. Sądze że to jedne z najlepszych propozycji na windowsa, choć ja sie na windowsach nie znam :lol:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ja mam windowsa XP a nie 3.1 :D. 3.1 to jest wersja kompilatora który się nazywa TCW ( czyli Turbo C++ For Windows" v.3.1) ale dzięki za podpowiedz. Posprawdzam sobie te kompilatory DEV-C++ i ten drugi popatrze i zobacze moze coś z tego będzie. Dzięki bardzo i pozdro dla ciebie bye.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Odnośnie łańcuchów to mam pytanie czy jest jakaś funkcja porównująca łańcuchy znaków ( chodzi mi liste nazwisk, która jest przeglądana i wrzuca się w odpowiednie miejsce nowe nazwisko by zachować alfabetyczną kolejność ), jeśli jest to prosiłbym o podanie funkcji i bibl. I w jaki sposób mamy dostęp do i-tego znaku łańcucha?

 

Jeśli ktoś ma chęci i czas odpowiedzieć - byłbym b.wdzięczny.

 

n00b@programming

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

string.h to jest standardowa biblioteka do pracy ze stringami. Macie tam f-cje do porównywania, szukania znaku w ciągu znaków, szukanie stringu w stringu źródłowym ( zwraca wskaźnik ) itd itd, więc po co pisać to co już jest napisane ( chyba że dla sportu ;) ). Czytajcie HELPY w kompilatorach których używacie !!! bo to podstawa.

 

Jak tworzycie tablice znaków to musicie podać rozmiar jej, chyba że alokujecie pamięć dynamicznie. I pamiętajcie że nazwa tablicy jest adresem pierwszego elementu ( możecie się posługiwać nią zarówno jak wskaźnikiem czy tablicą. Czyli np. pobrać wartość możemy zarówno *(tab+i) jak i tab ) , więc musicie uważać żeby nie wyjechać poza zakres tablicy!. A nie pytacie się później czemu wywala program błąd albo jakiegoś tam znaku nie znajduje. Na koniec jeszcze raz HELPY

Edytowane przez kalabanga

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...