Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中解析简单字符串?_C_Parsing - Fatal编程技术网

如何在C中解析简单字符串?

如何在C中解析简单字符串?,c,parsing,C,Parsing,我有一个以下格式的字符串: start 123 char c; if (sscanf(line, "start %d%c", &number, &c) == 1) { 我是这样分析的: if (strstr(line, "start") == line) { int number = -1; if (sscanf(line + strlen("start "), "%d", &number) == 1) { printf("star

我有一个以下格式的字符串:

start 123
char c;
if (sscanf(line, "start %d%c", &number,  &c) == 1) {
我是这样分析的:

if (strstr(line, "start") == line) {
    int number = -1;

    if (sscanf(line + strlen("start "), "%d", &number) == 1) {
        printf("start %d\n", number);
    }
}

C语言中有更好的方法吗?

是的,您只能使用以下方法:

if (sscanf(line, "start %d", &number ) == 1) {
不需要

if (strstr(line, "start") == line) {

如果要检查更多:请检查数字后是否没有多余字符,然后可以使用以下格式:

start 123
char c;
if (sscanf(line, "start %d%c", &number,  &c) == 1) {

注意:上述格式(甚至您的格式)不检查“开始”和数字之间是否只有一个空格。因此,如果您的字符串类似于
“start\t 45”
,那么
if
将返回true

您可以编写自己的解析器或尝试使用
strtok()
sscanf()
可能是最好的方式。@ППццццццццц请注意,此格式不检查“开始”和数字之间是否只有1个空格。这是可以的。在我的例子中,空格的数量并不重要。
if (strstr(line, "start") == line) {
    int number = -1;

    if (sscanf(line, "%*s %d", &number) == 1) {
        printf("start %d\n", number);
    }
}