2

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

但是,麻烦的是当有多个新行时,会输出上一行的单词。空格也没有得到充分照顾。当一个句子中有多个空格时,只输出一个空格。关于我可能出错的地方有什么想法吗?任何帮助将不胜感激。

更新了输入的代码,修复了大多数错误。我现在唯一遇到的问题是单词之间没有根据需要添加空格。连续有2个空格的地方,输入一个空格,有1个空格的地方,一个空格都不输入,这样输出单词。

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);
4

2 回答 2

4

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

请参阅数组中的默认值

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

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

cs = strComplete.c_str(); 
strcpy(translatedLine, cs);
于 2013-05-10T16:35:00.680 回答
0

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

于 2013-05-10T16:15:34.963 回答