如何在C中删除字符串中的引号

如何在C中删除字符串中的引号,c,quotes,C,Quotes,我试图删除给定行中的所有引号,除了后跟引号的反斜杠 我所做的就是这样 for (int i = 0; i < lineLength; i ++) { if (line[i] == '"' ) { if (line[i-1] == '\\') // if \" is used line[i-1] = '"'; // then print \ line[i]

我试图删除给定行中的所有引号,除了后跟引号的反斜杠

我所做的就是这样

for (int i = 0; i < lineLength; i ++) {

        if (line[i] == '"' ) { 
                if (line[i-1] == '\\') // if \" is used   
                        line[i-1] = '"'; // then print \
                line[i] = '\0'; // or 0
        }
}
for(int i=0;i
这将删除行中的所有字符..如何仅删除引号?
非常感谢您的帮助…

您的问题是
行[i]='\0';
-它终止字符串

如果要从C字符串中删除字符,需要保留两个索引—一个用于读取,一个用于写入,循环读取每个字符的读取索引,然后只写入希望继续使用第二个索引的索引

大致如下:

int j = 0;
for (int i = 0; i < lineLength; i ++) {
            if (line[i] != '"' && line[i] != '\\') { 
                 line[j++] = line[i];
            } else if (line[i+1] == '"' && line[i] == '\\') { 
                 line[j++] = '"';
            } else if (line[i+1] != '"' && line[i] == '\\') { 
                 line[j++] = '\\';
            }
}

//You missed the string termination ;)
if(j>0) line[j]=0;
intj=0;
对于(int i=0;i0)直线[j]=0;
int newPos=0;
对于(int-oldPos=0;oldPos
您正在将找到的第一个
字符设置为空字符,从而终止字符串

另外,当
i==0
时,旁边的但
行[i-1]
可能会导致分段错误,或者它可能恰好包含
\
,在这种情况下,第一个引号不会被删除

这样做可以满足您的需求:

char *lineWithoutQuotes = malloc(strlen(line));
int i, j;
if(line[0] != '"')
    lineWithoutQuotes[0] = line[0];
for(i = j = 1; i < strlen(line); i++){
    if(line[i] == '"' && line[i-1] != '\\')
        continue;
    lineWithoutQuotes[j++] = line[i];
}
char*lineWithoutQuotes=malloc(strlen(line));
int i,j;
如果(第[0]行!=“”)
不带引号的行[0]=行[0];
对于(i=j=1;i
使用索引的常规技术是:

int j = 0;
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';
或者这些主题的细微变化

int j = 0;
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';
char *dst = line;
char *src = line;
char c;

while ((c = *src++) != '\0')
{
    if (c == '\\')
    {
        *dst++ = c;
        if ((c = *src++) == '\0')
            break;
        *dst++ = c;
    }
    else if (c != '"')
        *dst++ = c;
}
*dst = '\0';