如何在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';