当存在'\ n'时,C ++输出重复行

时间:2013-05-10 15:52:01

标签: c++ arrays whitespace

我在使用这个类的成员函数时遇到了一些麻烦。基本上,它意味着将单词翻译成不同的语言,同时保持相同的标点符号和空格。 lineToTranslate是一个输入参数,它是一个单词,空格和标点符号的数组。其中的每个单词都必须单独从行中取出并使用dict.translate()函数进行翻译。这工作正常。

然而,问题在于当存在多个新行时,输出前一行的单词。空白也没有得到充分的照顾。当句子中有多个空格时,只输出一个空格。我有什么想法可能会出错吗?任何帮助都会非常感激。

更新了大多数错误修复后输入的代码。我现在唯一的问题是在单词之间不需要添加空格。如果一行中有2个空格,则输入一个空格,但是如果有一个空格,则不输入任何空格,并且输入的单词为空格。

int len = strlen(lineToTranslate);
string strComplete = "";
const char *cs;

for (int x = 0; x < len; x++)
{
    if (!isspace(lineToTranslate[x]))
    {   
        char temp[MAX_WORD_LEN];
        int j = 0;

        while(lineToTranslate[x] != ' ' && lineToTranslate[x] != '\t' && lineToTranslate[x] != '\n')
        {
            temp[j] = lineToTranslate[x];
            x++;
            j++;
        }
        temp[j] = '\0';

        char returned[MAX_WORD_LEN];

        if(temp[0] != '\0')
        {
            dict.translate(returned, temp);
            strComplete = strComplete + returned;
        }
    }

    else
    {
        strComplete = strComplete + lineToTranslate[x];
        x++;
    }
}
cs = strComplete.c_str();
strcpy(translatedLine, cs);

2 个答案:

答案 0 :(得分:4)

当您的for循环正在迭代spacespunctuation哪个dnt有资格进入while循环时,您仍在执行strComplete = strComplete + returned;,其中\0正在追加<space>\0<space>\0中间没有任何理由,所以你有输出字符串,如 - strComplete = strComplete + returned;

请参阅Default values in array

因此解决方案是将if放入if(temp[0] != '\0')。如果您的数组未输入returned,则该数组未初始化,因此您不应附加for

接下来....下面的两行应该在strComplete循环之外,因为您希望将translatedLine的最终结果复制到cs = strComplete.c_str(); strcpy(translatedLine, cs); 而不是每次迭代。

{{1}}

答案 1 :(得分:0)

对于空白我可以说,对于第一个空格,它将检查if条件,然后迭代将终止,我们返回for循环,x递增,现在lineToTranslate [x] =''。正确? 好的,所以while循环永远不会运行。如果条件 if (temp[0]!='\0') 很满意。 那么现在return存在什么?它没有初始化。你还在追加它。 也许我没多大帮助,但这就是我想到的。 尝试调试。