C++ c++;不工作周期

C++ c++;不工作周期,c++,char,cycle,C++,Char,Cycle,我将char*转换为char**。每个单词必须折叠成数组。但只折叠第一个单词。 输入:“abc def 123” 输出(应为):num==3,arr=={“abc”,“def”,“123”} out(real):num==1,arr=={“abc”} struct命令数组 { 向量Arr; 乌索特数; }; CommandArray文本::StrToArray(LPSTR) { 命令数组输出; LPSTR-TempStr; Out.Num=0; TempStr=strtok(Str,“”); w

我将char*转换为char**。每个单词必须折叠成数组。但只折叠第一个单词。 输入:“abc def 123” 输出(应为):num==3,arr=={“abc”,“def”,“123”} out(real):num==1,arr=={“abc”}

struct命令数组
{
向量Arr;
乌索特数;
};
CommandArray文本::StrToArray(LPSTR)
{
命令数组输出;
LPSTR-TempStr;
Out.Num=0;
TempStr=strtok(Str,“”);
while(TempStr!=NULL)
{
向外推,向后推(TempStr);
Out.Num++;
TempStr=strtok(空,“”);
}
返回;
}

strtok
修改其第一个参数(这就是为什么它是
char*
而不是
char const*
)。有一种猜测是,在首先调用
Text::stroarray

之后,您也会这样做。使用
cin.getline(输入,32)
若要获取以空格分隔的输入,
cin>>输入将不起作用

关于
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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构命令数组
{
向量Arr;
乌索特数;
};
命令数组strotarray(LPSTR Str)
{
命令数组输出;
LPSTR-TempStr;
Out.Num=0;
TempStr=strtok(Str,“”);
while(TempStr!=NULL)
{
向外推,向后推(TempStr);
Out.Num++;
TempStr=strtok(空,“”);
}
返回;
}
int main()
{
int ROWS=80;//80个字符宽
int COLUMNS=20;//20行
int i;
字符分隔符[]=“,\t\n”;
字符*令牌;
char*input_Dynamic1DCharPointerArray=新字符[80];
字符**输出\u Dynamic2DCharPointerArray=0;
//为行元素分配的内存。
输出_Dynamic2DCharPointerArray=新字符*[行];
//为每列的元素分配的内存。
对于(i=0;i//你能详细说明一下,并可能把它变成一个恰当的问题吗?你能描述一下什么是错的,预期会发生什么,一些特定输入的预期输出,等等。约阿希姆,输入:“abc def 123”,out(预期):num==3,arr={“abc”,“def”,“123”},out(real):num==1,arr={“abc”}请将任何其他信息添加到问题本身。请更新它。不要将其隐藏在注释中。正确使用时,代码会按预期工作:。问题必须在其他位置。
#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;
}