-3

char* を char** に変換します。各単語は配列に折りたたむ必要があります。ただし、最初の単語のみを折りたたみます。入力: "abc def 123" 出力 (予想): num ==3,arr == {"abc","def","123"} out(実数): num == 1,arr == {"abc" }

struct CommandArray
{
    vector<char*> Arr;
    USHORT Num;
};
CommandArray Text::StrToArray(LPSTR Str)
{
    CommandArray Out;
    LPSTR TempStr;
    Out.Num = 0;
    TempStr = strtok (Str," ");
    while(TempStr != NULL)
    {
        Out.Arr.push_back(TempStr);
        Out.Num++;
        TempStr = strtok(NULL," ");
    }
    return Out;
}
4

2 に答える 2

0

strtok最初の引数を変更します (そのため、char*ではなくchar const*です)。1 つの推測は、 への呼び出しの後に同じことを行うことですText::StrToArray

于 2012-08-20T12:44:20.003 に答える
0

初め。cin.getline(input,32);スペースで区切られた入力を取得するために 使用しますが、機能しcin>>inputません。

について。char*_ char**以下のコードは、各単語を配列に折りたたみます。

#include<windows.h>
#include<vector>
#include<string>
#include<iostream>
using namespace std;


struct CommandArray
{
    vector<char*> Arr;
    USHORT Num;
};


CommandArray  StrToArray(LPSTR Str)
{
    CommandArray Out;
    LPSTR TempStr;
    Out.Num = 0;
    TempStr = strtok (Str," ");
    while(TempStr != NULL)
    {
        Out.Arr.push_back(TempStr);
        Out.Num++;
        TempStr = strtok(NULL," ");
    }
    return Out;
}


int main()
{

    int ROWS=80; //80 characters wide
    int COLUMNS=20;// 20 lines
    int i;

    char seperators[]   = " ,\t\n";
    char *token;    

    char* input_Dynamic1DCharPointerArray = new char[80];
    char **output_Dynamic2DCharPointerArray = 0;
    //memory allocated for elements of rows.
    output_Dynamic2DCharPointerArray = new char *[ROWS] ;
    //memory allocated for  elements of each column.
    for(   i = 0 ; i < ROWS ; i++ ) output_Dynamic2DCharPointerArray[i] = new char[COLUMNS];


    strcpy(input_Dynamic1DCharPointerArray,"apples 123 oranges 456 bananas 789 lemons 101112" );

    //cout<<"  \n";
    //cin.getline(input_Dynamic1DCharPointerArray,32);

    cout<<"  \ninput = "<<input_Dynamic1DCharPointerArray<<"  \n\n";
    cout<<"Output = \n";

   token = strtok( input_Dynamic1DCharPointerArray, seperators );  
   i=0;
   while( token != NULL )
   {
      strcpy(output_Dynamic2DCharPointerArray[i],token);

      cout<<output_Dynamic2DCharPointerArray[i]<<"  \n";

      token = strtok( NULL, seperators ); // C4996
      i++;
   }

    cout<<"  \n";
    delete[] input_Dynamic1DCharPointerArray;

    //free the allocated memory
    for(   i = 0 ; i < ROWS ; i++ )
    delete [] output_Dynamic2DCharPointerArray[i] ;
    delete [] output_Dynamic2DCharPointerArray ;

    return 0;
}
于 2012-08-20T14:48:25.750 に答える