gpt4 book ai didi

C 试图匹配准确的子字符串,仅此而已

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:43 25 4
gpt4 key购买 nike

我尝试了不同的函数,包括 strtok()strcmp()strstr(),但我想我遗漏了一些东西.有没有办法匹配字符串中的精确子串?

例如:

如果我有名字:“Tan”

我有 2 个文件名:“SomethingTan5346”和“nothingTangyrs634”

那么我怎样才能确保我匹配第一个字符串而不是两个呢?因为第二个文件是给 Tangyrs 这个人的。还是这种方法不可能?我是不是走错了路?

最佳答案

如果情况似乎如此,您只想识别包含您的文本但紧跟数字的字符串,您最好的选择可能是让自己 a good regular expression implementation并搜索 Tan[0-9]

可以简单地使用 strstr() 找到字符串然后用 isnum() 检查后面的字符,但是这样做的实际代码是:

  1. 并不像您想象的那么容易,因为您可能需要进行多次 搜索(例如,TangoTangoTan42 需要进行三次检查);和
  2. 如果搜索有可能变得更复杂(例如 Tan 后跟 1-3 位数字或恰好两个 @ 字符和一个 X).

正则表达式库将使这一切变得容易得多,前提是您愿意投入一点精力来学习它。


如果您不想花时间学习正则表达式,下面的完整测试程序应该是一个很好的起点,可以根据第一段中的要求评估字符串:

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

int hasSubstrWithDigit(char *lookFor, char *searchString) {
// Cache length and set initial search position.

size_t lookLen = strlen(lookFor);
char *foundPos = searchString;

// Keep looking for string until none left.

while ((foundPos = strstr(foundPos, lookFor)) != NULL) {
// If at end, no possibility of following digit.

if (strlen(foundPos) == lookLen) return 0;

// If followed by digit, return true.

if (isdigit(foundPos[lookLen])) return 1;

// Otherwise keep looking, from next character.

foundPos++;
}

// Not found, return false.

return 0;
}

int main(int argc, char *argv[]) {
if (argc < 3) {
printf("Usage testprog <lookFor> <searchIn>...\n");
return 1;
}
for (int i = 2; i < argc; ++i) {
printf("Result of looking for '%s' in '%s' is %d\n", argv[1], argv[i], hasSubstrWithDigit(argv[1], argv[i]));
}
return 0;
}

不过,如您所见,它不如正则表达式搜索优雅,而且如果您的需求发生变化,它可能会变得不那么优雅:-)

运行:

./testprog Tan xyzzyTan xyzzyTan7 xyzzyTangy4 xyzzyTangyTan12

显示它是 Action :

Result of looking for 'Tan' in 'xyzzyTan' is 0
Result of looking for 'Tan' in 'xyzzyTan7' is 1
Result of looking for 'Tan' in 'xyzzyTangy4' is 0
Result of looking for 'Tan' in 'xyzzyTangyTan12' is 1

关于C 试图匹配准确的子字符串,仅此而已,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47050947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com