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

时间:2017-02-05 00:31:16

标签: c string

我必须在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);
}

2 个答案:

答案 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)

代码中的问题:

  1. 声明字符串或数组?
    字符串是连续的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}})

  2. 您的scanf未定义。
    请在文件顶部加入“stdio.h&gt;。

  3. 由于我的回答中的一些错误而被删除

    <小时/> 修正了一些问题,谢谢你指出我的错误