我在使用这个类的成员函数时遇到了一些麻烦。基本上,它意味着将单词翻译成不同的语言,同时保持相同的标点符号和空格。 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);
答案 0 :(得分:4)
当您的for
循环正在迭代spaces
或punctuation
哪个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);
而不是每次迭代。
{{1}}
答案 1 :(得分:0)
对于空白我可以说,对于第一个空格,它将检查if条件,然后迭代将终止,我们返回for循环,x递增,现在lineToTranslate [x] =''。正确?
好的,所以while循环永远不会运行。如果条件
if (temp[0]!='\0')
很满意。
那么现在return
存在什么?它没有初始化。你还在追加它。
也许我没多大帮助,但这就是我想到的。
尝试调试。