C 读取string2中的string1并计算string2中string1的出现次数
我必须用C编写一个函数,计算输入字符串中字符串“mystring”的出现次数 用户将输入一个包含短语“mystring”的字符串,该字符串中没有空格,程序将计算在输入字符串中读取“mystring”的次数 这是我到目前为止编写的代码,但它不能正常工作C 读取string2中的string1并计算string2中string1的出现次数,c,string,C,String,我必须用C编写一个函数,计算输入字符串中字符串“mystring”的出现次数 用户将输入一个包含短语“mystring”的字符串,该字符串中没有空格,程序将计算在输入字符串中读取“mystring”的次数 这是我到目前为止编写的代码,但它不能正常工作 int substr_count(char *srcString, char *subString) { int i = 0; // counter variable int countOccurence = 0;
int substr_count(char *srcString, char *subString)
{
int i = 0; // counter variable
int countOccurence = 0;
while(srcString[i] != 0) // loop until hit a null in srcString
{
if (srcString[i] == subString[i])
{
countOccurence++;
}
i++; // increment to next position in srcString
}
return countOccurence; // return value of occurences
}
int main(void)
{
char srcString[200] = ""; //empty string
char subString[8] = "mystring"; //substring
int get_count = 0;
scanf("%s", srcString); //get a string from input keyboard
get_count = substr_count(srcString, subString);
printf("%s occurs %d times in %s\n", subString, get_count, srcString);
}
这样使用:
#include <stdio.h>
#include <string.h>
int substr_count(const char *srcString, const char *subString){
int countOccurence = 0;
size_t sub_len = strlen(subString);
const char *p = srcString;
while(p = strstr(p, subString)){//if NOT NULL, found it
++countOccurence;
p += sub_len;//set next search point
}
return countOccurence;
}
int main(void){
char srcString[200] = "";
char subString[] = "mystring";//const *char subString = "mystring"
int get_count = 0;
scanf("%199s", srcString);//199 : Set limits
get_count = substr_count(srcString, subString);
printf("%s occurs %d times in %s\n", subString, get_count, srcString);
}
#包括
#包括
int substr_计数(常量字符*srcString,常量字符*子字符串){
int countoccurrence=0;
大小子字符串=字符串(子字符串);
const char*p=srcString;
而(p=strstrstr(p,subString)){//如果不为NULL,则找到它
++计数发生率;
p+=sub_len;//设置下一个搜索点
}
返回发生次数;
}
内部主(空){
char srcString[200]=“”;
char subString[]=“mystring”;//常量*char subString=“mystring”
int get_count=0;
scanf(“%199s”,srcString);//199:设置限制
get_count=substr_count(srcString,subString);
printf(“%s在%s中出现%d次\n”,子字符串,get\u count,srcString);
}
代码中的问题:
字符串是具有结尾'\0'null终止符的连续字符块,而数组是具有相同类型的连续元素块。
非常重要的是要知道,字符串之间的文字(介于
“
”之间的所有内容)总是比它的外观多出一个元素。
“哈哈”包含5个字符,'h','a','h','a','0'
“
包含1个字符,'\0',即使看起来是空的。
空终止符字符确实起作用。如果传入数组或字符,所有标准字符串函数现在都可以工作。
因此您应该将
子字符串声明为初始化为“mystring”的未定义元素量(char subString[]=“mystring”;
)
或者您可以将子字符串声明为9个元素的数组,最后一个元素作为空终止符(char subString[9]=“mystring”;
)
请在文件顶部添加“stdio.h>
修复了一些问题,感谢您指出我的错误。1)
char-subString[8]=“mystring”
-->char-subString[]=“mystring”
或char-subString[9]=“mystring”
2)while(srcString[i]!=0)//循环直到srcString中出现空值{if(srcString[i]==subString[i]){countoccurrence++;
这是错误的逻辑。您可以使用strstrstr
@izzleskizzle如果输入的字符串仅由子字符串组成,则子字符串的出现计数器等于strlen(srcString)/strlen(substring).:)@BLUEPIXY我如何实现strstrstr
来返回一些事件?4)似乎有一种情况,在重复的情况下,子字符串出现故障,如mymymy
fgets(srcString,199,stdin);
-->fgets(srcString,200,stdin);
或fgets(srcString,sizeof srcString,stdin)
没有必要-1.hmm我在编译器中测试了它,重复似乎很好mymy在mymy中出现了5次
:搜索区域重叠。如果没有重叠,结果是3E.g我说了“mymy”。我说了多少次“mymy”?那是三次。不是五次。