查找C中字符串中SubString的所有排列的出现次数

时间:2017-04-01 19:40:35

标签: count substring strstr

基本上这个程序由另外两个程序组成。 第一部分找到子串的排列和 第二部分,找出给定String中所有排列的出现次数。 在大多数情况下,我没有获得所需的输出 如果有人能提供帮助,我会很高兴。谢谢。

这是程序..

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>


int appearanceCount(int input1,int input2,char* input3,char* input4)
{
     int count=0,temp,i,j,k;
     int no_of_permutations=1;
     for(i=1;i<input1+1;i++)
     {
         no_of_permutations *= i;
     }
     int a = no_of_permutations/((input1-1));

     for (i=0; i < a; i++)          
     {
         for(j=0; j<input1-1; j++)
         {
             char temp; 
             temp=input3[j];    
             input3[j]=input3[j+1];
             input3[j+1] = temp;                        
             //printf("\n%s",input3);
             char *temp_input4 = input4;     
 //Now I have got the permutation
 //Finding the occurance 
             while(temp_input4 = (strstr(temp_input4, input3)) ) 
             {
                 count++;
                 printf("\n%s  -- %s  -- %d",temp_input4,input3,count);
                 temp_input4++;
             }
         }
      }
      return count;
 }

 int main() 
 {
     int output = 0;
     int ip1;
     scanf("%d", &ip1);
     int ip2;
     scanf("%d", &ip2);
     char* ip3;
     ip3 = (char *)malloc(512000 * sizeof(char));
     scanf("\n%[^\n]",ip3);
     char* ip4;
     ip4 = (char *)malloc(512000 * sizeof(char));
     scanf("\n%[^\n]",ip4);
     output = appearanceCount(ip1,ip2,ip3,ip4);
     printf("\n%d", output);
     return 0;
 }

我的值的预期输出 4 11 CADA ABRACADABRA

会 2

因为可以在字符串中找到的两个可能的序列是Acad和cadA

但我输出为0;

1 个答案:

答案 0 :(得分:0)

尝试使用anagram搜索,然后它就能正常工作。