我必须在C中编写一个函数来计算字符串的出现次数" mystring"在输入字符串中。
用户将输入一个包含短语" mystring"的字符串。字符串中没有任何空格,程序将计算多少次" mystring"在输入字符串中读取。
这是我到目前为止编写的代码,但它无法正常工作。
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);
}
答案 0 :(得分:2)
像这样使用strstr:
#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);
}
答案 1 :(得分:0)
代码中的问题:
声明字符串或数组?
字符串是连续的char块,其末尾为'\ 0'null终止符,而数组是具有相同类型的连续元素块。
非常重要的是要知道字符串文字("haha"
之间的所有内容)之间总是有一个元素而不是它的外观。
""
包含5个字符,'h','a','h','a','\ 0'
subString
包含1个char,'\ 0',即使它看起来像空。
空终结者字符确实有所作为。如果传入数组或char,所有标准字符串函数现在都可以使用。
因此,您应该将char subString[] = "mystring";
声明为未定义的元素初始化为“mystring”(char subString[9] = "mystring";
)
或者你可以将你的subString声明为一个包含9个元素的数组,最后一个元素作为空终止符({{1}})
您的scanf未定义。
请在文件顶部加入“stdio.h&gt;。
由于我的回答中的一些错误而被删除
<小时/> 修正了一些问题,谢谢你指出我的错误