C 读取string2中的string1并计算string2中string1的出现次数

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;

我必须用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);
}
这样使用:

#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”;

  • 您的scanf未定义。
    请在文件顶部添加“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”?那是三次。不是五次。