Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

wskaznik do Ciągu znaków -funkcja dzieli na słowa i daje do tablic(tylko własne funkcje)

Ostatnio zmodyfikowano 2015-11-09 20:15
Autor Wiadomość
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.


C/C++
#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 ]
P-139846
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:
C/C++
#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.
P-139849
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.
P-139851
j23
» 2015-11-09 14:42:49
A jak nie możesz używać strumienia istringstream, to tak możesz rozbić na słowa:
C/C++
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;
}
P-139852
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.
P-139854
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:
C/C++
while( * p1 && * p1 == ' ' ) ++p1;

...

while( * p2 && * p2 != ' ' ) ++p2;
P-139862
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ć.
P-139872
« 1 »
  Strona 1 z 1