C++ 当存在“”时输出重复行

C++ output duplicating lines when there is a ' '

本文关键字:输出 存在 C++      更新时间:2023-10-16

我在使用类的这个成员函数时遇到了一些问题。 基本上,它旨在将单词翻译成不同的语言,同时保持相同的标点符号和空格。 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] = '';
        char returned[MAX_WORD_LEN];
        if(temp[0] != '')
        {
            dict.translate(returned, temp);
            strComplete = strComplete + returned;
        }
    }
    else
    {
        strComplete = strComplete + lineToTranslate[x];
        x++;
    }
}
cs = strComplete.c_str();
strcpy(translatedLine, cs);

当你的for循环迭代spacespunctuation时,这些 dnt 不符合进入的条件,而循环你仍在执行strComplete = strComplete + returned;,它在没有任何原因地在中间附加,所以你有像 -- 这样的输出字符串 -- <space><space>

请参阅数组中的默认值

所以解决方案是把strComplete = strComplete + returned;放在if里。您的数组在未输入if(temp[0] != '')时未初始化,因此不应追加returned

下一个。。。。下面的两行应该不在for循环中,因为您希望将strComplete的最终结果复制到translatedLine而不是每次迭代。

cs = strComplete.c_str(); 
strcpy(translatedLine, cs);

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