c - 从 C 中的不规则字符串中获取所有整数

标签 c parsing string ansi

我正在寻找一种(相对)简单的方法来解析随机字符串并从中提取所有整数并将它们放入数组中 - 这与其他一些类似的问题不同,因为我的字符串没有标准格式。

例子:

pt112parah salin10n m5:isstupid::42$%&%^*%7first3

我最终需要得到一个包含这些内容的数组:

112 10 5 42 7 3

我想要一种比通过字符串逐个字符更有效的方法。

谢谢你的帮助

最佳答案

一个快速的解决方案。我假设没有超出 long 范围的数字,也没有需要担心的减号。如果这些都是问题,那么您需要做更多的工作来分析 strtol() 的结果,并且您需要检测 '-' 后跟一个数字。

代码确实遍历了所有字符;我认为你无法避免这种情况。但它确实使用 strtol() 来处理每个数字序列(一旦找到第一个数字),并从 strtol() 停止的地方恢复(和 strtol () 非常友好地告诉我们它停止转换的确切位置)。

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    const char data[] = "pt112parah salin10n m5:isstupid::42$%&%^*%7first3";
    long results[100];
    int  nresult = 0;

    const char *s = data;
    char c;

    while ((c = *s++) != '\0')
    {
        if (isdigit(c))
        {
            char *end;
            results[nresult++] = strtol(s-1, &end, 10);
            s = end;
        }
    }

    for (int i = 0; i < nresult; i++)
        printf("%d: %ld\n", i, results[i]);
    return 0;
}

输出:

0: 112
1: 10
2: 5
3: 42
4: 7
5: 3

关于c - 从 C 中的不规则字符串中获取所有整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271603/

相关文章:

python - 从字符串中提取带括号的 Python 表达式

java - JAVA 的 JSP 和 HTML 解析器

c - 数据结构(C): big bricks small house,还是小砖头大房子?

c - 文件崩溃导致的 Windows 大写转换

parsing - 如何修改 XPATH 解析器?

c# - Enum 上的参数化描述属性

javascript - 正则表达式甚至在一个句子上匹配第一句话

java - 如何精确标记 xml 或 html 之外的字符串值,我必须使用 java 将它存储在列表中?

c - 对 'pthread_create' 的 undefined reference ——链接器命令选项顺序(目标文件之前/之后的库?)

c - 数组旋转的运行时错误