【问题标题】:Text parsing with . and : in ANSI C [closed]文本解析与 .和:在 ANSI C [关闭]
【发布时间】:2014-01-20 05:24:53
【问题描述】:

我有这样的字符串6.28:12.56:-1:1,由: 分隔的4 个双精度值,我需要获取每个双精度常量并将每个插入到不同的变量中。最简单的方法是什么?谢谢。

【问题讨论】:

    标签: c string separator


    【解决方案1】:

    您通常会为此使用strtokstrtok_r,如果您使用线程或可能有其他重叠的解析序列)。

    【讨论】:

    • 请注意,strtok 在解析字符串时会对其进行修改,因此您可能应该将其复制到临时数组中。
    【解决方案2】:

    来自http://www.dotnetperls.com/split

    String.Split() 分隔字符串。字符串通常在其数据中具有分隔符。定界符包括“\r\n”换行符序列以及逗号和制表符。 Split 处理字符串和字符分隔符的拆分。

    string s = "6.28:12.56:-1:1";
        //
        // Split string on ':'.
        // ...
        //
        string[] words = s.Split(':');
    
        for(int i=0;i < words.length;i++)
    {
        string word1=words[0];
            string word2=words[1];
            string word3=words[2];
            string word4=words[3];
    }
    

    对于 ANSI C

    使用 sscanf

    char st[] = "6.28:12.56:-1:1";
    double word1, word2, word3, word4;
    
    int rc = sscanf(st, "%lf:%lf:%lf:%lf", &word1, &word2, &word3, &word4);
    
    /* Check that rc is 4 for success */
    

    *sscanf 函数返回成功读取的项目数

    【讨论】:

    • 感谢您的回答。是的,我从 C++ 知道这个函数,但是 ANSI C 没有这个函数……我需要编写自己的拆分函数,这就是为什么我要求最简单的方法;)。
    • 不客气..然后检查我的编辑
    • 我希望答案现在应该尽可能简洁明了。
    • 是的,这正是我所需要的。我会投票给你,但我的代表很低:/
    • @SajadLfc:乞求赞成和接受被认为是糟糕的形式。由于问题是关于 C 的,因此您的答案中讨论 C++ 的部分无关紧要,应该删除。只有当您有固定数量的字段时,您的 C 解决方案才有效;它无法解析"6.28:12.56:-1:1:1.23"(除非您动态构建格式字符串,但这将是矫枉过正)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多