繁体   English   中英

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

[英]Read string1 within string2 and count occurences of string1 in string2

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

像这样使用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. 声明字符串还是数组?
    字符串是连续的char块,带有结尾的'\\ 0'空终止符,而数组是具有相同类型的元素的连续块。

    知道字符串文字之间( " "之间的所有内容)总是比其外观多一个元素,这一点非常重要。
    "haha"包含5个字符,“ h”,“ a”,“ h”,“ a”,“ \\ 0”
    ""包含1个字符,'\\ 0',即使它看起来像是空的。


    空终止符确实有所不同。 现在,如果您传入数组或char,则所有标准字符串函数都将起作用。

    因此,您应该将subString声明为初始化为“ mystring”的未定义元素数量( char subString[] = "mystring";
    或者,您可以将subString声明为9个元素的数组,最后一个元素作为空终止符( char subString[9] = "mystring";

  2. 您的scanf未定义。
    请在文件顶部添加“ stdio.h>”。

由于我的回答有误而将其删除


修复了一些问题,感谢您指出我的错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM