首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C-拆分字符串

C-拆分字符串
EN

Stack Overflow用户
提问于 2021-02-04 20:27:53
回答 1查看 54关注 0票数 1

如果我想让它变成4个单词,我如何处理这个字符串。如果我使用sscanf,它会将单词'Face mask‘一分为二。或者,是否可以使用sscanf以某种方式防止这种情况发生?

输入:

代码语言:javascript
运行
复制
2021-01-01 2021-7-1 'Face masks' "Wear everywhere"
2000-08-05 2010-8-8 LOCKDOWN 'xxxxx'

输出:

代码语言:javascript
运行
复制
2021-01-01
2021-7-1 
'Face masks' 
"Wear everywhere"
....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-04 20:44:15

由于存在可选的引号和可能的空词(''""),scanf()的功能不足以满足您的需要。

这是一个通用的手工编码解析器:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <string.h>

// split a string into up to count words stored in a 2D array of char
int split(char output[][100], int count, const char *str) {
    // recognises space separated words and quoted content without
    // embedded quotes of the same type. Quotes are stripped in output.
    for (int i = 0; i < count; i++) {
        const char *start;
        int len;

        str += strspn(str, " \t\f\v\r\n");
        if (*str == '\0')
            return i;
        if (*str == '\'') {
            start = ++str;
            len = strcspn(str, "\'");
            str += len;
            str += (*str == '\'');
        } else
        if (*str == '\"') {
            start = ++str;
            len = strcspn(str, "\"");
            str += len;
            str += (*str == '\"');
        } else {
            start = str;
            len = strcspn(str, " \t\f\v\r\n");
            str += len;
        }
        snprintf(output[i], sizeof(output[i]), "%.*s", len, start);
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66045637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档