提问人:Omar Jebbari 提问时间:11/13/2023 最后编辑:Omar Jebbari 更新时间:11/13/2023 访问量:68
我怎样才能进行拆分,忽略 C 中的引号或d_quotes?
how can i make a split that ignore what inside quotes or d_quotes in c?
问:
我重新编码了一个在每个分隔符之间拆分的拆分,我想修改它以忽略双引号或单引号内的内容,但我不能
我尝试使用标志,但是如果它在测试中成功,则在其他测试中失败,这非常复杂 这是我尝试了很多的代码,如果有人有更好的算法或已经以这种方式重新编码它
void quote_state(char c , int *inquotes) // checking quotes state
{
if (c == '\'' || c == '\"')
{
if(!(*inquotes))
*inquotes = 1;
else if (*inquotes == 1)
*inquotes = 0;
}
}
char **ft_split2(char *s, char c)
{
char **str;
int i;
int j;
int start;
int inquotes;
// allocating exactly what i need
//...
while (s[j])
{
while (s[j] == c && !inquotes)
j++;
start = j;
quote_state(s[j], &inquotes);
while (s[j] != c && s[j])
{
quote_state(s[j], &inquotes);
j++;
if (inquotes)
break;
}
if ((s[j] == "\"" || s[j] == "\'") && inquotes)
j++;
if (j > start)
str[i++] = wordp(s, start, j); // allocating and placing elements ..
}
str[i] = NULL
return(str);
}
输入是 : “ kaka koko ” waah waah “ lla ”
这是输出: kaka\0koko\0“\0waah waah ”\0lla\0
但我希望输出为:kaka\0koko\0“ waah waah ”\0lla\0NULL
答:
1赞
mzimmers
11/13/2023
#1
if ((s[j] == "\"" || s[j] == "\'") && inquotes)
您能看到这条线的不正确之处,从而产生未定义的行为吗?
评论
0赞
Omar Jebbari
11/13/2023
那行是一个硬编码的部分,是的,这是一种未被发现的行为,一般来说,我把代码放在规则要求我放的时候,我知道它是错误的,想知道是否有已知的算法可以用于这个问题
1赞
mzimmers
11/13/2023
我得到的是,你正在将一个字符比作一个字符串。两次。这是一个非常简单的解决方法。
0赞
Omar Jebbari
11/13/2023
是的,但它工作正常,你想说它应该是'\''||'\"' ?但是虽然我在双引号中使用它,但它有效
0赞
mzimmers
11/13/2023
是的,这就是我的意思。我很高兴这次它成功了,但我不建议你依赖它。
评论
c
x