Reysan Temat założony przez niniejszego użytkownika |
wskaznik do Ciągu znaków -funkcja dzieli na słowa i daje do tablic(tylko własne funkcje) » 2015-11-09 13:51:00 Witam mam problem z tym zadaniem - muszę stworzyć funkcje ,która podzieli ciąg znaków na słowa i umieści je w tablicach a potem wszystkie te słowa przechowa w innej tablicy i wyświetli. Nie mogę zrozumieć jak w funkcji podzielić ciąg i utworzyć tablice. #include <iostream>; using namespace std;
int main() { string fCiagi( char * lista ); char znaki[] = "Ala ma kota, a kot ma ale"; string znaki2( "Ala ma kota, a kot ma ale" ); char * wsk1; string * wsk2; wsk1 = &* znaki; wsk2 = & znaki2; cout << "char: " << znaki[ 4 ] << endl; cout << "string: " << znaki2[ 4 ] << endl; cout << "wsk1(char): " << wsk1[ 4 ] << endl; cout << "wsk2(string): " << wsk2[ 4 ] << endl; fCiagi( wsk1 ); cout << fCiagi( wsk1 ) << endl; } string fCiagi( char * lista ) { int dlugWsk1 = 0; while( lista[ dlugWsk1 ] != '\0' ) dlugWsk1++; for( int i = 0; i < dlugWsk1; i++ ) { if( lista[ dlugWsk1 ] != '\0' ) { return lista[ dlugWsk1 ]; } else { return endl; } } }
[ cpp ]
|
|
michal11 |
» 2015-11-09 14:21:02 Widzę, że używasz stringów, więc pewnie możesz tez skorzystać z istringstream do podziału zdania na wyrazy. Wtedy wystarczy taki kod: #include <sstream>
istringstream iss( txt ); string slowo; while( iss >> slowo ) { cout << pom << endl; }
Teraz tylko w pętli musisz dodawać te wyrazy do jakiejś dynamicznej tablicy, możesz uzyć std::vector wtedy będzie najłatwiej: vec.push_back( slowo ) . Jeżeli nie możesz użyć vectora to albo stwórz dość dużą statyczną tablice, albo baw się w dynamiczne alokowanie tablicy (czyli w dużym uproszczeniu właśnie vector). Kod pisany z ręki więc niekoniecznie w 100% poprawny. |
|
Reysan Temat założony przez niniejszego użytkownika |
» 2015-11-09 14:29:22 Problem w tym że mogę używać jedynie funkcji zaimplementowanych przeze mnie. A co do stringa to użyłem go testowo bo zgodnie z wytycznymi tego zadania nie mogę używać żadnych funkcji poza swoimi więc nie wiem czy użycie go będzie poprawne. |
|
j23 |
» 2015-11-09 14:42:49 A jak nie możesz używać strumienia istringstream, to tak możesz rozbić na słowa: const char * p1 = "Ala ma kota, a kot ma ale"; const char * p2 = p1;
while( * p2 ) { while( * p1 && !isalnum( * p1 ) ) ++p1; p2 = p1; while( * p2 && isalnum( * p2 ) ) ++p2; if( p1 != p2 ) cout << string( p1, p2 ) << '\n'; p1 = p2; }
|
|
Reysan Temat założony przez niniejszego użytkownika |
» 2015-11-09 15:00:27 Ale isalnum jest funkcją. chyba że by go zastąpić != '\0' to wtedy można by. |
|
j23 |
» 2015-11-09 18:18:36 Pytanie tylko, czy nie możesz używać funkcji, które za Ciebie wykonają zadanie, np. strtok, czy w ogóle nie możesz używać jakichkolwiek funkcji bibliotecznych (co według mnie jest sztucznym stwarzaniem problemu). No ale dobra, wersja bez funkcji: while( * p1 && * p1 == ' ' ) ++p1;
...
while( * p2 && * p2 != ' ' ) ++p2; |
|
Reysan Temat założony przez niniejszego użytkownika |
» 2015-11-09 20:15:30 Dany jest wskaznik do ciagu znaków “Ala ma kota, a kot ma ale”. Napisz program przedstawiajacy działanie funkcji która: - podzieli ciag na wyrazy, - kazdy z wyrazów przechowa w oddzielnej tablicy znaków, - wszystkie wyrazy przechowa w oddzielnej tablicy słów zwracanej jako wynik funkcji. W całym programie mozna wykorzystywac jedynie funkcje zaimplementowane przez siebie, ponadto do tablic mozna odwołac sie jedynie za pomoca wskazników.
Taką mam treść. Zdaje sobie sprawę że jest to niepotrzebne utrudnianie, ponieważ przy użyciu funkcji byłoby to dużo szybsze i wydajeniejsze, ale tak chcę mój ćwiczeniowieć. |
|
« 1 » |