寻找子串个数(串)

寻找子串个数(串)

时间: 1ms        内存:128M

描述:

从字符串s中找出字符串t出现的次数,没有则输出0

输入:

输入两个字符串

输出:

输出个数

示例输入:

112121
121

示例输出:

2

提示:

参考答案(内存最优[752]):

#include<stdio.h> 
#include<stdlib.h> 
struct string 
{ 
    char data[200]; 
    int len; 
}; 
struct string strassign1() 
{ 
  struct string s; 
  int i; 
  char c; 
  for(i=0;;i++) 
  { 
    if(scanf("%c",&c)&&c!='\n') 
        s.data[i]=c; 
    else
        break; 
  } 
  s.len=i; 
  return s; 
} 
struct string strassign2() 
{ 
  struct string s; 
  int i; 
  char c; 
  for(i=0;;i++) 
  { 
    if(scanf("%c",&c)!=EOF) 
        s.data[i]=c; 
    else
        break; 
  } 
  s.len=i; 
  return s; 
} 
    
struct string substr(struct string s,int i,int j) 
{ 
    struct string str; 
    int k; 
    str.len=0; 
    for(k=i-1;k<i+j-1;k++) 
        str.data[k-i+1]=s.data[k]; 
    str.len=j; 
    return str; 
} 
int strequal(struct string s,struct string t) 
{ 
    int same=1,i; 
    if(s.len!=t.len) 
        same=0; 
    else
        for(i=0;i<s.len;i++) 
            if(s.data[i]!=t.data[i]) 
            { 
                same=0; 
                break; 
            } 
    return same; 
  
} 
int main() 
{ 
    int m,n,j=0,i; 
    struct string  p1,p2,p3; 
    p1=strassign1(); 
    p2=strassign2(); 
    for(i=0;i<p1.len;i++) 
    { 
        p3=substr(p1,i,p2.len); 
        if(strequal(p2,p3)) 
        { 
             j++;
        } 
    } 
   printf("%d",j); 
   return 0; 
} 

参考答案(时间最优[0]):

#include<stdio.h> 
#include<stdlib.h> 
struct string 
{ 
    char data[200]; 
    int len; 
}; 
struct string strassign1() 
{ 
  struct string s; 
  int i; 
  char c; 
  for(i=0;;i++) 
  { 
    if(scanf("%c",&c)&&c!='\n') 
        s.data[i]=c; 
    else
        break; 
  } 
  s.len=i; 
  return s; 
} 
struct string strassign2() 
{ 
  struct string s; 
  int i; 
  char c; 
  for(i=0;;i++) 
  { 
    if(scanf("%c",&c)!=EOF) 
        s.data[i]=c; 
    else
        break; 
  } 
  s.len=i; 
  return s; 
} 
    
struct string substr(struct string s,int i,int j) 
{ 
    struct string str; 
    int k; 
    str.len=0; 
    for(k=i-1;k<i+j-1;k++) 
        str.data[k-i+1]=s.data[k]; 
    str.len=j; 
    return str; 
} 
int strequal(struct string s,struct string t) 
{ 
    int same=1,i; 
    if(s.len!=t.len) 
        same=0; 
    else
        for(i=0;i<s.len;i++) 
            if(s.data[i]!=t.data[i]) 
            { 
                same=0; 
                break; 
            } 
    return same; 
  
} 
int main() 
{ 
    int m,n,j=0,i; 
    struct string  p1,p2,p3; 
    p1=strassign1(); 
    p2=strassign2(); 
    for(i=0;i<p1.len;i++) 
    { 
        p3=substr(p1,i,p2.len); 
        if(strequal(p2,p3)) 
        { 
             j++;
        } 
    } 
   printf("%d",j); 
   return 0; 
} 

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注