我有一组以字符串开头的数字,在C:
中的字符串中intr 250727985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238463729 0 0 0 0 0 8510 1009565 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 75963 0 0 0 0 0 0 0 0 0 0 0 0 0 6416543 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29812 197 0 0 0 0 842664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我想捕捉(匹配)他们的第26个位置(我回来时所需的匹配:1009565。)
我尝试过这种模式:
(?:[0-9]+[[:space:]]){26}(?<![0-9])
但这是捕获整个字符串直到所需的位置。 如何用C中的RegExp实现这一点?有人可以提供样品来源吗?
RegExp是最快(最轻的系统资源)方式吗?我需要在一秒钟内重复这个操作,所有的正常运行时间。
我对如何做到这一点感到困惑。
答案 0 :(得分:2)
我认为使用RegExp
会使问题更复杂,正如其他人所建议的那样,使用strtok
会更容易。
您可以在每个空格处解析字符串,并使用<string.h>
中的strcmp
匹配您尝试搜索的模式。
以下是您可能想要使用的基本概念:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *string_search(char *string, unsigned position);
int main(void) {
char string[] = "250727985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238463729 0 0 0 0 0 8510 1009565 0 0 0 0 0";
char *check;
unsigned position = 26;
check = string_search(string, position);
if (check != NULL) {
printf("String %s found in position %d.\n", check, position);
} else {
printf("No string found in position %d.\n", position);
}
return 0;
}
char *string_search(char *string, unsigned position) {
char *number;
const char *delim = " ";
unsigned pos_count = 1;
number = strtok(string, delim);
while (number != NULL) {
if (pos_count == position) {
return number;
}
pos_count++;
number = strtok(NULL, delim);
}
return NULL;
}
答案 1 :(得分:0)
Unix字符串库有strtok
,它将字符串分成给定分隔符的标记。你应该能够简单地遍历字符串,直到你到达你想要的位置。
有关strtok
的堆叠溢出的讨论位于Using strtok in c,其中包含一些示例代码和问题。