开发者

Counting substrings in C

A friend of mine needed help counting the occurrences of a substring in a string, and I came up with the following code. Does anyone know a better method to do this?

#include "stdio.h"
#include "string.h"

int main(int argc, char *argv[])
{
    char str1[50], str2[50];
    int i, j, l1, l2, match, count;

    printf("String 1:\n");
    gets(str2);
    printf("String 2:\n");
    gets(str1);

    l1 = strlen(str1);
    l2 = strlen(str2);

    count = 0;

   开发者_如何学Python for(i = 0; i < l1; i++)
    {
        match = 0;
        for(j = 0; j < l2; j++)
        {
            if(str1[i + j] == str2[j])
            {
                match++;
            }
        }

        if(match == l2)
        {
            count++;
        }
    }

    printf("Substrings: %d\n", count);
}


how about this: (using the strstr function, reference here)

int count = 0;
char str1[50], str2[50];
char* tmp = str1;
int count;

printf("String 1:\n");
gets(str2);
printf("String 2:\n");
gets(str1);

while(*tmp != '\0' && (tmp = strstr(tmp, str2))) {
    ++count;
    ++tmp;
}


Please do not use or encourage the use of gets. Beyond the fact that it will introduce a point of failure in your code, it has been deprecated as of C99 and will be gone completely from C1X.

As others have said, strstr is your friend here:

#include <stdio.h>
#include <string.h>

int main(void)
{
  char s1[50], s2[50];
  char *p;
  size_t count = 0;
  size_t len1;

  printf("Gimme a string: ");
  fflush(stdout);
  fgets(s1, sizeof s1, stdin);
  p = strchr(s1, '\n');          // get rid of the trailing newline
  if (p)
    *p = 0;

  printf("Gimme another string: ");
  fflush(stdout);
  fgets(s2, sizeof s2, stdin);
  p = strchr(s2, '\n');          // get rid of the trailing newline
  if (p)
    *p = 0;

  p = s2;
  len1 = strlen(s1);

  while ((p = strstr(p, s1)) != NULL && p != s1)
  {
    count++;
    p += len1;
  }

  printf("Found %lu occurrences of %s in %s\n", count, s1, s2);
  return 0;
}


You might want to take a look at the strstr function (if you're not already familiar with it).


int main()
  {
          char *str = "This is demo";
          char *sub = "is";
          int i,j,count;
          i=j=count=0;
          while(str[i]!='\0')
          {
           if (str[i] == sub[j] && str[i+1] == sub[j+1])
          {
                  count++;
          }
          i++;
          }
          cout<<count;
          return 0;
  }

Above code works but this is static.


You can use QString in QT library

QString t = "yourstring";
t.count("yoursubstring");
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜