我怎样才能进行拆分,忽略 C 中的引号或d_quotes?

how can i make a split that ignore what inside quotes or d_quotes in c?

提问人:Omar Jebbari 提问时间:11/13/2023 最后编辑:Omar Jebbari 更新时间:11/13/2023 访问量:68

问:

我重新编码了一个在每个分隔符之间拆分的拆分,我想修改它以忽略双引号或单引号内的内容,但我不能

我尝试使用标志,但是如果它在测试中成功,则在其他测试中失败,这非常复杂 这是我尝试了很多的代码,如果有人有更好的算法或已经以这种方式重新编码它

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

C 算法

评论

1赞 Omar Jebbari 11/13/2023
我调试了 3 天 XD,我不会问我是否真的被卡住了
0赞 Vlad from Moscow 11/13/2023
@Omar Jebbari 这些字符串 “\”“, ”\“\'””函数应该返回什么?
0赞 chux - Reinstate Monica 11/13/2023
@Omar Jebbari,改进问题。发布一个最小的可重现示例。考虑使用比 , , ...cx
0赞 Omar Jebbari 11/13/2023
@vladfromMoscow很难告诉你这个例子是相对错误的,因为 u 使用了一些不带 \ 的 “ 所以这意味着 u 给函数的不仅仅是一个字符串,但函数只接受一个字符串
0赞 Vlad from Moscow 11/13/2023
@OmarJebbari我显示了正确的 C 字符串。重新调查它们。

答:

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
是的,这就是我的意思。我很高兴这次它成功了,但我不建议你依赖它。