Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > составление строки с помощью strtok()


Автор: choodo 20.5.2010, 02:12
Из двух заданных строк A и B составить по n слов в каждой составить строку C, поочередно записав в нее слова из А и B.
Вот набросал, но strok()...! Можно ли как-то заставить ф-ю работать с нужной мне строкой, а не той, которая была запомнена в strok()?
Код

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{
    clrscr();
    char textA[1000]="";//initializing
    char textB[1000]="";//
    char textC[1000]="";
    char slovo[1000];
    int n;      // n slov

    cout << "Vvedite n:";
    cin  >> n;

    cout << "Vvedite dlya A " <<n<<" slov(o/a):"<< endl;

    for (int i=0;i<n;++i)
    {
        cout <<"Slovo "<< (i+1) <<":";
        cin  >>slovo;
        strcat(textA,slovo);
        strcat(textA," ");
    }
    cout <<"Poluchili stroku A: "<<textA<<endl;

    //B
    cout << "Vvedite dlya B " <<n<<" slov(o/a):"<< endl;

    for(i=0;i<n;++i)
    {
        cout <<"Slovo "<< (i+1) <<":";
        cin  >>slovo;
        strcat(textB,slovo);
        strcat(textB," ");
    }
    cout <<"Poluchili stroku B: "<<textB<<endl;

    char *pA; //
    char *pB; //

    //1st call - razdelenie na leksemy
    pA = strtok(textA, " ");
    strcat(textC, pA);

    pB = strtok(textB, " ");
    strcat(textC, pB);

    do
    {
        pA = strtok(NULL, " ");//тут работает с pB,  а нужно с pA
        if(pA)
        {
            strcat(textC, pA);
            //strcat(textC," ");
        }

        pB = strtok(NULL, " ");
        if(pB)
        {
            strcat(textC, pB);
            //strcat(textC," ");
        }
     }
     while(pA || pB);

    cout<<textC;

}


"Насильно" переставляем NULL в строках на длину лексемы: http://forum.sources.ru/index.php?showtopic=303900&st=0&#entry2599257

Автор: xvr 20.5.2010, 11:39
Разбей строки A и B на слова по отдельности (сначала A, потом B). Результаты сохрани в 2 штуки vector<char*>. Потом объединяй их как хочешь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)