我正在尝试编写一个代码来检查输入的子字符串是否在输入的字符串中。通过一些谷歌搜索,我设法做到了。但是我应该编写一个代码来告诉子字符串是否重复了几次。
例如,如果string为"ABBABBABAAABBBABABAA"
且substring为"BABA"
,则输出应介于5-8,13-16,15-18之间。
如何改进我的代码?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char sntnc[400], word[400], *ptr;
puts("Please enter a string: ");
gets(sntnc);
puts("\nEnter a substring to be searched: ");
gets(word);
ptr=strstr(sntnc,word);
if (strstr(sntnc, word)==NULL)
printf("\nThe string doesn't contains the substring.");
else
printf("\nPositin of the substring in the string: %d.", ptr - sntnc + 1);
return 0;
}
答案 0 :(得分:0)
找到子字符串的实例并打印其位置后,递增ptr
使其指向下一个字符,然后再次使用strstr
作为要搜索的字符串调用ptr
。循环直到它返回NULL:
ptr=strstr(sntnc,word);
if (strstr(sntnc, word)==NULL) {
printf("\nThe string doesn't contains the substring.");
} else {
do {
printf("\nPositin of the substring in the string: %d.", ptr - sntnc + 1);
ptr=strstr(ptr+1,word);
while (ptr);
}
此外,gets
功能不安全。由于它不对输入执行边界检查,因此可能允许写入目标缓冲区的末尾,从而调用未定义的行为。请改用fgets
。