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