如何编辑带双引号和反斜杠的字符串,如此
“我爱”编程\“”
并像这样打印
我喜欢“编程”
我在网上找到了这个,但没有运气:
for (int i = 0; i < lineLength; i++)
{
if (line[i] == '\\')
{
line[j++] = line[i++];
line[j++] = line[i];
if (line[i] == '\0')
break;
}
else if (line[i] != '"')
line[j++] = line[i];
}
line[j] = '\0';
答案 0 :(得分:1)
当您遇到反斜杠时,您当前正在复制反斜杠和下一个字符。你真正需要做的只是增加反斜杠然后复制下一个字符,就像它不是反斜杠或引号一样。而不是line[j++] = line[i++];
(对于if
正文中的第一行),您只需要i++;
。
还有其他一些你可以解决的问题,但是应该让它运转起来。
答案 1 :(得分:0)
恕我直言,当处理这些删除字符的问题时,读/写指针方法是最简单的方法之一,它使算法易于理解。
void RemoveQuotes(char * Str)
{
const char * readPtr=Str;
char * writePtr=Str;
for( ;*readPtr; readPtr++, writePtr++)
{
/* Checks the current character */
switch(*readPtr)
{
case '\"':
/* if there's another character after this, skip the " */
if(readPtr[1])
readPtr++;
/* otherwise jump to the check and thus exit from the loop */
else
continue;
break;
case '\\':
/* if a " follows, move readPtr ahead, so to skip the \ and copy
the "; otherwise nothing special happens */
if(readPtr[1]=='\"')
readPtr++;
break;
}
/* copy the characters */
*writePtr=*readPtr;
}
/* remember to NUL-terminate the string */
*writePtr=0;
}