使用C ++进行分词的字符串

时间:2018-01-30 08:34:04

标签: c++ string

我已经将示例代码编写为字符串转换为单词,但无法理解为什么输出仅作为我的输出。 下面帮我解释为什么会发生这种情况。

//g++  5.4.0
#include <iostream>
#include <string>
using namespace std;
int main()
{

char abc[20] = "My name is abc";

char result[5][10]= {
                    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} };
int k = 0,j=0;


for (int i =0; abc[i]!='\0'; i++,j++)
{


    result[k][j] = abc[i];
    if (abc[i] == ' ')
    {
     result[k][j] = '\0'; 
     cout<<result[k]<<endl;
     k++;
     j=0;


    }


}     
}

以下代码的输出将成为我的唯一不在My之后的下一个单词。 结果[k](如果条件内)只返回我的下一个词。

2 个答案:

答案 0 :(得分:0)

每个循环都有j++,因此j=0在下一个循环中设置为j=1。 对于每result[k][0] = 0,这会导致k>0

还需要处理abc[i] = '\0'案件,否则不会出现最后一句话。

for (int i =0; ; i++,j++) {
    result[k][j] = abc[i];
    if (abc[i] == ' ' || abc[i] == '\0') {
        result[k][j] = '\0';·
        cout<<result[k]<<endl;
        k++;
        j=-1;
    }

    if (abc[i] == '\0') break;
}

答案 1 :(得分:0)

制作

j = -1;

在if语句中。休息你可以搞清楚。