C语言实验题——统计子字符串个数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实验题——统计子字符串个数相关的知识,希望对你有一定的参考价值。

输入一个字符串s1和一个子串s2,统计s1中子串s2的个数。
输出子串的个数
#include <stdio.h>
#include <string.h>
int main()

char a[200],b[200],*g;
int c=0;
scanf("%s",a);
getchar();
scanf("%s",b);
getchar();
g=a;
while(g!=0)

g=strstr(g,b)+strlen(b);
c++;

printf("%d\n",c);
return 0;

程序运行时出错,指针在这里应该怎么用

#include <stdio.h>
#include <string.h>
int find(char * str1, char * str2) //查找出现的次数 
 
int i,j; 
int str1len=strlen(str1),str2len=strlen(str2); 
int count=0; 
for(i=0;i<str1l   ... ...

这样的结果满意吗,请采纳,发源码

追问

我是想知道指针怎么代替数组,每次我用都错,郁闷

参考技术A

其实关键问题在于strstr返回null时,g并不是null,而是strlen(b)……

还有就算这样,c还被多加了一次,因为就算strstr返回null,c还会被加1……

我重写了一下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()

char a[200],b[200],*g;
int c=0;
//我的机器上VS2012不允许使用不安全的scanf,不然编译还得加参数……你的机器上按原来的写就好了……
scanf_s("%s",a,199);
getchar();
scanf_s("%s",b,199);
getchar();
g=a;
while(true)

char* pos=strstr(g,b);
if(pos==NULL)

break;

else

c++;
g=pos+strlen(b);


printf("%d\\n",c);
system("PAUSE");
return 0;

本回答被提问者采纳
参考技术B 试试while(*g != '\0') 参考技术C while(*g)追问

还是运行的时候出现问题,停止工作,我想知道我错哪里了

c语言,从键盘输入一串字符串,统计字符串中特定字符的个数,并输出个数

程序设计思路如下:

从键盘分别输入字符串和要统计的字符,然后对此字符串从头开始逐个与所统计的字符比较,如相同,则让计数器加1,知道字符串整体比较结束为止,计数器中就是需统计的字符的个数。

#include "stdio.h"

main()
 char str[100],ch;  /*定义str字符串,定义ch用来存放要统计的字符*/
  int cnt=0,i;       /*定义cnt用作计数器,初始值为0*/
  
  /*输入字符串*/
  printf("请输入字符串:");    
  gets(str);
  
  /*输入要统计的字符*/
  printf("请输入要统计的字符:");
  scanf("%c",&ch);
  
  /*对此字符串从头开始逐个与所统计的字符比较,如相同,则让计数器加1,知道字符串整体比较结束为止*/
  for( i=0;str[i];i++ )
     if( str[i]==ch )
         cnt++;
  
  /*输出结果*/       
  printf("%s串中%c字符的个数是:%d个",str,ch,cnt);

参考技术A

主要代码:

char s[1000];
int i,j=0; 
scanf("%s",s); 
for(i=0;i<1000;i++)

if(s[i]=='*') //for循环查找字符*的数量
j++;//利用变量j计数

追问

可不可以编写完整程序呢?谢谢

追答

基本上把它写入主函数就行了吧

#include<stdio.h>

int main()

  

char s[1000];

int i,j=0; 

scanf("%s",s); 

for(i=0;i<1000;i++)



if(s[i]=='*') //for循环查找字符*的数量

j++;//利用变量j计数

 

printf("指定字符数为%d\\n",j);

return 0;

追问

要输出的是从键盘上输入的一个特定字符的个数,不是*

追答

你把*换成你要求的字符就行了,*只是做个示范。你的意思是我把它改改,加一个从键盘输入特定字符的语句?

追问

不用了,你写的对的,可能我理解错题意了,谢谢了

追答

如你所说,我写了个比较全能的代码,应该更符合题意

#include<stdio.h> 

int main() 

   

char s[1000],sp; 

int i,j=0; 

printf("请输入字符串\\n");

scanf("%s",s);

getchar();

printf("请输入特定字符\\n");

scanf("%c",&sp);

for(i=0;i<1000;i++) 

 

if(s[i]==sp) //for循环查找字符sp的数量 

j++;//利用变量j计数 

  

printf("指定字符数为%d\\n",j); 

return 0; 

本回答被提问者采纳
参考技术B 主要代码:
char s[1000];
int i,j=0;
scanf("%s",s);
for(i=0;i<1000;i++)

if(s[i]=='*') //for循环查找字符*的数量
j++;//利用变量j计数
参考技术C 主要代码:
char s[1000];
int i,j=0;
scanf("%s",s);
for(i=0;i<1000;i++)

if(s[i]=='*') //for循环查找字符*的数量
j++;//利用变量j计数
参考技术D #include <stdio.h>
#include <string.h>
#define MAX 100
int main()

char num[MAX]=0;
char c=0;
int len,cnt=0;
scanf("%s %c",num,&c);
len=strlen(num);
while(len--)

if(c==num[len]) cnt++;

printf("%d\\n",cnt);
    return 0;

以上是关于C语言实验题——统计子字符串个数的主要内容,如果未能解决你的问题,请参考以下文章

c语言代码编程题汇总 :统计字符串中的大写和小写字母的个数

C语言编程题:从键盘输入一串字符,统计其中的数字与字母个数并输出

华为笔试算法题1

python如何在给定的字符串中,统计某个特定子串的数量?

C语言 计算字符串中子串出现的次数 求更改

codevs 1862 最长公共子序列(求最长公共子序列长度并统计最长公共子序列的个数)