[c++] Program oparty na C-stringach, z wykorzystaniem wskaźników.
Ostatnio zmodyfikowano 2013-06-26 14:14
Nindix Temat założony przez niniejszego użytkownika |
[c++] Program oparty na C-stringach, z wykorzystaniem wskaźników. » 2013-06-25 22:44:55 Witam. Mam pewien problem. Posiadam program który wykonuje 3 rzeczy : - przeplatanie C-stringu wybranym przez użytkownika znakiem, - usuwanie z C-stringu samogłosek, - usuwanie z C-stringu spółgłosek. Mój problem polega na tym że ta ostatnia rzecz nie działa do końca poprawnie, ponieważ usuwa wszystkie spółgłoski prócz 'r'. Zdołałem zauważyć także, że w ostatnim wyrazie mojego C-stringu spółgłoska 'r' została usunięta poprawnie. Jest ona umieszczona na początku wyrazu, może to dlatego. Proszę o pomoc.
#include "stdafx.h" #include <iostream>
using namespace std;
void f_Share( char * tablica, char znak ); void f_Remove_vowel( char * tablica, char * tablica2 ); void f_Remove_consonant( char * tablica, char * tablica2 ); char vowel[ 14 ] = { "aeyuioAEYUIO" }; char consonant[ 42 ] = { "rqwtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM" };
int _tmain( int argc, _TCHAR * argv[] ) { char napis[ 80 ] = { "Maly program mojej roboty" }; char znak; cout << "Jakimi znakami chcesz przedzielic moj napis ? - : "; cin >> znak; f_Share( napis, znak ); f_Remove_vowel( napis, vowel ); f_Remove_consonant( napis, consonant ); cout << endl; system( "pause" ); return 0; }
void f_Share( char * tablica, char znak ) { cout << endl; while( * tablica ) { cout << *( tablica++ ) << znak; } cout << endl; } void f_Remove_vowel( char * tablica, char * tablica2 ) { cout << endl; while( * tablica ) { int i; for( i = 0; i < 14; i++ ) { if( * tablica == * tablica2++ ) { * tablica++; } } tablica2 = & vowel[ 0 ]; cout << *( tablica++ ); } cout << endl; }
void f_Remove_consonant( char * tablica, char * tablica2 ) { cout << endl; while( * tablica ) { int i; for( i = 0; i < 42; i++ ) { if( * tablica == * tablica2++ ) { * tablica++; } } tablica2 = & consonant[ 0 ]; cout << *( tablica++ ); } cout << endl; }
|
|
pekfos |
» 2013-06-26 13:03:09 Funkcja f_Remove_consonant jest źle napisana, bo może wyświetlać znaki, które powinna usunąć, bo po przejściu całej tablicy spółgłosek i tak wyświetlasz znak. Najlepiej użyj funkcji strchr() z biblioteki standardowej, do sprawdzania, czy dany znak należy do c-stringa ze spółgłoskami. strchr |
|
Nindix Temat założony przez niniejszego użytkownika |
» 2013-06-26 14:14:30 Miałeś racje, ta funkcja i tak wyświetlała te znaki. O ile w pierwszej funkcji było to poprawne ponieważ spółgłoski się przeplatały ze samogłoskami, to o tyle tu już to nie mogło działać. Dzięki za pomoc. Wolałem jednak nie stosować tej funkcji bibliotecznej. A tak to wyszło :
#include "stdafx.h" #include <iostream>
using namespace std;
void f_Share( char * tablica, char znak ); void f_Remove_vowel( char * tablica, char * tablica2 ); void f_Remove_consonant( char * tablica, char * tablica2 ); char vowel[ 14 ] = { "aeyuioAEYUIO" }; char consonant[ 42 ] = { "rqwtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM" };
int _tmain( int argc, _TCHAR * argv[] ) { char napis[ 80 ] = { "Maly program mojej roboty" }; char znak; cout << "Jakimi znakami chcesz przedzielic moj napis ? - : "; cin >> znak; f_Share( napis, znak ); f_Remove_vowel( napis, vowel ); f_Remove_consonant( napis, consonant ); cout << endl; system( "pause" ); return 0; }
void f_Share( char * tablica, char znak ) { cout << endl; while( * tablica ) { cout << *( tablica++ ) << znak; } cout << endl; } void f_Remove_vowel( char * tablica, char * tablica2 ) { cout << endl; while( * tablica ) { bool nst = false; int i; for( i = 0; i < 14; i++ ) { if( * tablica == * tablica2++ ) { * tablica++; nst = true; } } tablica2 = & vowel[ 0 ]; if( !nst ) cout << *( tablica++ ); } cout << endl; }
void f_Remove_consonant( char * tablica, char * tablica2 ) { cout << endl; while( * tablica ) { bool nst = false; int i; for( i = 0; i < 42; i++ ) { if( * tablica == * tablica2++ ) { * tablica++; nst = true; } } tablica2 = & consonant[ 0 ]; if( !nst ) cout << *( tablica++ ); } cout << endl; }
|
|
« 1 » |