You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何从指定格式字符串中提取可变长度的整数与字符串

嘿,刚学C一周就上手写程序,这进度不错!从Python转过来确实会觉得C的字符串处理麻烦不少,毕竟Python有现成的split、正则这些工具,C就得靠标准库函数来搞定。我来给你拆解这两个场景的实现方法~

场景一:提取标识符和两个整数

这个场景的字符串格式很固定:标识符[数字1,数字2];,我们可以用C标准库的sscanf函数来直接匹配格式,一次性提取出需要的内容,比手动遍历字符串简单多了。

实现代码

#include <stdio.h>

int main() {
    char str[50] = "dimension[1080,720];";
    char identifier[20]; // 定义足够大的数组存标识符,根据实际需求调整大小
    int num1, num2;

    // 用sscanf匹配格式:先读[之前的所有字符(标识符),再读括号里的两个整数
    int match_count = sscanf(str, "%[^[]][%d,%d];", identifier, &num1, &num2);
    
    // 检查是否成功匹配3个目标(标识符、num1、num2)
    if (match_count == 3) {
        printf("标识符:%s\n第一个数字:%d\n第二个数字:%d\n", identifier, num1, num2);
    } else {
        printf("格式不匹配,提取失败!\n");
    }
    return 0;
}

关键格式说明

  • %[^[]]:这个格式符的意思是匹配所有不是'['的字符,所以会把dimension完整读出来,直到遇到第一个[为止。
  • [%d,%d];:后面的部分用来匹配括号里的内容,%d会自动识别整数(不管位数多少),中间的逗号、前后的括号和分号都是固定分隔符,sscanf会自动跳过它们。

场景二:提取标识符、带引号的字符串和两个整数

这个场景多了一个带双引号的字符串,格式是标识符["字符串",数字1,数字2];,我们只需要调整sscanf的格式字符串,把引号里的内容匹配出来就行。

实现代码

#include <stdio.h>

int main() {
    char str[50] = "dimension[\"string\",1080,720];";
    char identifier[20];
    char inner_str[20]; // 存引号里的字符串,注意调整数组大小适配实际内容
    int num1, num2;

    // 格式字符串里用\"转义双引号,匹配引号内的内容
    int match_count = sscanf(str, "%[^[]][\"%[^\"]\",%d,%d];", identifier, inner_str, &num1, &num2);
    
    // 这次要匹配4个目标,所以检查match_count是否为4
    if (match_count == 4) {
        printf("标识符:%s\n内部字符串:%s\n第一个数字:%d\n第二个数字:%d\n", identifier, inner_str, num1, num2);
    } else {
        printf("格式不匹配,提取失败!\n");
    }
    return 0;
}

关键格式说明

  • \"%[^\"]\":这里的\"是转义后的双引号,sscanf会先匹配一个双引号,然后%[^\"]匹配所有不是双引号的字符(也就是string),最后再匹配后面的双引号,这样就能把引号里的内容干净地提取出来(不带引号)。

小提示

  1. 如果标识符或内部字符串可能很长,一定要调整数组的大小,避免缓冲区溢出(比如把20改成更大的数值)。
  2. 如果输入字符串里可能有空格(比如dimension[ "hello", 123, 456 ];),可以在格式字符串的分隔符前后加空格,比如"%[^[]] [ \"%[^\"]\" , %d , %d ];",这样sscanf会自动忽略空格。

内容的提问来源于stack exchange,提问作者JacopoBiondi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:32:44