求解,用C语言编写一个程序,查找一个字符串在另一个字符串中出现的次数,谢谢大家了!

作者&投稿:宓哀 (若有异议请与网页底部的电邮联系)
编写一个c语言strstr函数程序,查找一个字符在另外一个字符串出现的总次数!~

//#include "stdafx.h"//vc++6.0加上这一行.#include "stdio.h"#include "string.h"int strstr(char *a,char *b){ char *strstr(const char *,const char *); int sum=0,ln=strlen(b); while(a=strstr(a,b)){ sum++; a+=ln; } return sum;}int main(void){//测试一下 char *a="123456789012345678901234567890",*b="345"; printf("%d
",strstr(a,b)); return 0;}

我不确定我的想法对不对,假如是下面这样的情况:
a数组的值为:"abbcd"
b数组的值为:"bcd"
a数组比到第三个字符的时候跟b数组的不一样,但是i++,j
=
0了,相当于a数组现在的值是c,b数组的值是b,相当于就不对了
因为没多少时间看,希望分析的不对帮忙指出
你将这句
if
(a[i]==b[j])
j++;
else
j=0;
改成
if(a[i]
==
b[j])
{
j++;
}
else
if(a[i]
==
b[0])
{
j
=
1;
}
else
{
j
=
0;
}
试试看吧

//第一种

public static Map count(String str){

Map<String,Integer>maps=new HashMap<String,Integer>();

for(int i=0;i<str.length();i++){

//获取下标所对应的字符

String key=String.valueOf((str.charAt(i)));

//判断该字符在map中是否存在

if(!maps.containsKey(key))

//如果不存在,将key(该字符)与value(出现的次数)存到map中

maps.put(key,1);

else{

//如果存在,将该字符对应的value取出

int val=maps.get(key);

//给该字符所对应的value+1

maps.put(key,val+1);

}

}

return maps;

}

//第二种

public static Map count1(String str){

Map<String,Integer>map=new HashMap<>();

char arr[]=str.toCharArray();//转换成字符数组

Arrays.sort(arr);//排序数组

String temp=new String(arr);//重新产生字符串

//遍历统计

for(int startIndex=0;startIndex<str.length();){

char c=temp.charAt(startIndex);//获取第一个相同字符

String t=String.valueOf(c);//把第一个字符转换成字符串

//获取字符最后出现的位置

int lastIndex=temp.lastIndexOf(t);

map.put(t,(lastIndex+1-startIndex));

startIndex=lastIndex+1;//下次开始的位置

}

return map;

}

//第三种

public static Map count2(String str){

Map<Character,Integer>map=new HashMap<>();

for(int i=0;i<str.length();i++){

int x=0;//记每个不同字符出现的次数

char c1=str.charAt(i);

for(int m=0;m<=(str.length()-1);m++){

if(c1==str.charAt(m)){

x++;

}

}

map.put(c1,x);

}

return map;

}

//第四种

public static Map count3(String str){

Map<String,Integer>map=new HashMap<>();

HashSet<Character>hSet=new HashSet<Character>();

char[]cs=str.toCharArray();

for(char c:cs){

hSet.add(c);

}

ArrayList<Character>list=new ArrayList<Character>(hSet);

int n=hSet.size();//有多少种字符

int[]times=new int[n];//保存每种字符的出现次数

for(char c:cs){

times[list.indexOf(c)]++;

}

for(int i=0;i<n;i++){

map.put(""+list.get(i),times<i>);

}

return map;

}

//展示

public static void show(Map<String,Integer>map){

for(Map.Entry i:map.entrySet()){

System.out.println("“"+i.getKey()+"”"+"出现的次数为"+i.getValue()+"次");

}

}

扩展资料:

out关键字会导致参数通过引用来传递。这与ref关键字类似,不同之处在于ref要求变量必须在传递之前进行初始化。若要使用out参数,方法定义和调用方法都必须显式使用out关键字。例如:

classOutExample

{

staticvoidMethod(outinti)

{

i=44;

}

staticvoidMain()

{

intvalue;

Method(outvalue);//valueisnow44

}

}

尽管作为out参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。

ref和out关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用ref参数,而另一个方法采用out参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码:

classCS0663_Example

{

//compilererrorCS0663:"cannotdefineoverloaded

//methodsthatdifferonlyonrefandout"

publicvoidSampleMethod(outinti)

{

}

publicvoidSampleMethod(refinti)

{

}

}

但是,如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示:

classRefOutOverloadExample

{

publicvoidSampleMethod(inti)

{

}publicvoidSampleMethod(outinti)

{

}

}

备注

属性不是变量,因此不能作为out参数传递。

参考资料:

百度百科——out(C#中的out)



函数返回str2在str1中出现的次数
#include <string.h>
unsigned int strstrcount( char *str1, char *str2 )
{
char *str = str1;
unsigned int c = 0;

while( (str = strstr( str, str2 )) != NULL )
{
c++;
str++;
}
return c;
}

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

void main()
{
int Find(char * a,char * b);
char a[100],b[100];
printf("输入字符串a:");
scanf("%s",a);
printf("输入字符串b:");
scanf("%s",b);
int d=Find(a,b);
if(d==-1)
printf("不存在\n");
else
printf("在位置:%d\n",d);
}

int Find(char * a,char * b)
{
int alen=strlen(a);
int blen=strlen(b);
if(blen>alen)
return -1;
int i,j;
for(i=0;i<=a-b;i++)
{
char c[100];
for(j=0;j<blen;j++)
c[j]=a[i+j];
c[j]='\0';
if(strcmp(c,b)==0)
return i;
}
return -1;
}

#include<stdio.h>

#include<string.h>

int main()

{

int i,j,k=0;

char a[40]="basd asasdfg as zx67 asd mklo";

char b[20];

gets(b);

int count=0;

int tags=0;

for(i=0;i<strlen(a);)

{

if(a[i]==b[0])

for(k=i,j=0;j<strlen(b);j++,k++)

{

if(a[k]==b[j])

tags=1;

else

tags=0;

if(tags==1&&j==strlen(b)-1)

count++;

}

i++;

}

printf("%d",count);

}



#include "string.h"
#include "stdio.h"
int strcount(char *,char *);
void main()
{char s[20],ss[20];
scanf("%s%s",s,ss);
printf("n=%d",strcount(s,ss));

}
int strcount(char *p,char *q)
{int i=0,n=0;
if(strlen(q)==0)
return 0;
while (strlen(p)>=strlen(q))
{
for(i=0;i<strlen(q);i++)
{if(*(p+i)!=*(q+i))
break;
else if(i==(strlen(q)-1))
n++;
}
p++;
}
return n;
}


解一元二次方程ax2+bx+c=0的解。 c语言编程求代码
scanf("%f%f%f",&a,&b,&c);temp=b*b-4*a*c;num=sqrt(temp);\/\/开根号 if(temp>0) \/\/两个不同实根 { printf("有两个根\\n");x1=(-b+num)\/(2*a);x2=(-b-num)\/(2*a);printf("x1=%0.2f, x2=%0.2f\\n",x1,x2);\/\/保留两位输出 } else if(temp==0)\/\/一个...

用c语言编写程序求x^5+3x^3+7=0的解。
\/ include <stdio.h> include <math.h> int main(){ double left=-2;\/\/初始左值 double right=-1;\/\/初始右值 double mid,sleft;\/\/二分中值,方程左表达式值 do { mid=(left+right)\/2;\/\/求二分中值 sleft=pow(mid,5)+3*pow(mid,3)+7;\/\/求方程左表达式值 \/\/缩小寻解范围 if(s...

在C语言中用函数解写一个函数,是给定的一个3*3的二维整型数组转置,即行 ...
include <stdio.h>void output(int (*array)[3]);void swap3mul3(int (*array)[3]){ int i,j,temp; for(i=0;i<3;i++) for(j=0;j<i;j++) { temp=array[i][j]; array[i][j]=array[j][i]; array[j][i]=temp; }}void output(int (*array)...

如何用C语言编写 解 A+B+C=CD C+D+C=AB AB=? 的程序?
include<stdio.h> viod main(){int A,B,C,D;for(A=0;A<10;A++)for(B=0;B<10;B++)for(C=0;C<10;C++)for(D=0;D<10;D++)if(A+B+C=C*D)printf("A=%d ,B=%d ,C=%d ,D=%d \\n",A,B,C,D,);printf("C+D+C=A*B=%d\\n",C+D+C);} 这是求10以内...

输入两个整数a,b计算出ax+b=0的解,求这个用c语言怎样编写
include<stdio.h>double fun(float a,float b){ return -b\/a;}int main(){ float a,b,x; printf("please input a and b:"); scanf("%f %f", &a,&b); x = fun(a,b); printf("x=%.2f",x); return 0;} ...

编写一个C程序,运行时输入a,b,c三个值,输出其中值最大者
include<stdio.h> int main(){ int a,b,c,max;printf("请输入三个数:\\n");scanf("%d%d%d",&a,&b,&c);if(a>b)max=a;if(c>max)max = c;printf("三个数中最大的数为:%d",max);return 0;}

麻烦用C语言解决下这2道题 1.编写一个程序,输出3到100之间的素数,要求...
include<stdio.h> include<math.h> int isprime(int n){int i;for(i=2;i<=sqrt(n);i++)if(n%i==0)return 0;return 1;} int main(){ int i,j,s=0;for(i=3;i<=100;i+=2)if(isprime(i)){printf("%4d",i);if(++s%10==0)printf("\\n");} getch();return 0;} ...

...库函数strcat).这个用C语言怎么写程序啊求详细解释~急!
void fun (char s1[],char s2[]){ int i,j;for (i=0;s1[i] !=’\\0’; i++); \/*求出的i为pA字符的总长度,包括结束标记位*\/ for (j=0;s2[j] !=’\\0’; j++)s1[i++]=s2[j]; \/*将pB字符串连在pA字符串的后面*\/ s1[i]='\\0’; \/*在字符串最后加上结束标记符*...

用c语言编写x+3y=30所有正整数的解
include <stdio.h>int main(){int x, y;for(x = 0; x <= 30; x++){for(y = 0; y<=10; y++){if((x + 3*y)== 30)printf("x = %d,y = %d\\n",x,y);}}return 0;}

用C语言编一个程序求方程a*(x1)(x1)+b*(x2)*(x2)+c(x3)*(x3)+d*(x...
include "stdio.h"void main(){ int a[4],ex,count=0;int i,j,k,q;unsigned char x[4]={1,2,3,4};\/\/int left,right;printf("输入a,b,c,d(大于-50,小于50)");scanf("%d%d%d",&a[0],&a[1],&a[2],&a[3]);if((a[0]>50||a[0]<-50)||(a[1]>50||a[1]<...

铜陵市15774994400: 怎样利用c语言编写一个程序在一个字符串数组中查找一个指定的字符并输出他第一次 -
晋咐一干: #include<stdio.h> #include<string>void main() {char a[20],c; //a[20]为字符串,c为要查找字符int i,n[5],num = 0,j = 0; //i,j为计数器,n[5]纪录下标,num记录个数printf("请输入字符串(少于20个字符)\n");gets(a);printf("请输入要查找...

铜陵市15774994400: 求解,用C语言编写一个程序,查找一个字符串在另一个字符串中出现的次数,谢谢大家了!
晋咐一干: 函数返回str2在str1中出现的次数 #include &lt;string.h&gt; unsigned int strstrcount( char *str1, char *str2 ) { char *str = str1; unsigned int c = 0; while( (str = strstr( str, str2 )) != NULL ) { c++; str++; } return c; }

铜陵市15774994400: 求一个C语言的程序:查找某个数. -
晋咐一干: #include<stdio.h>#define N 10 void main() { int a[N],i,flag,x; printf("please input 10 scores:\n"); for(i=0;i<N;i++) scanf("%d",&a[i]); printf("please input X to look for:\n"); scanf("%d",&x); flag=0; for(i=0;i<N;i++) if(a[i]==x) { printf("find: %d it is...

铜陵市15774994400: C语言 编写一个程序 从该文件中查找某个字符(该字符可以输入),如果查找成功 -
晋咐一干: #include void Input() { FILE *fp; if((fp = fopen("file1.txt","w")) ==NULL) { exit(1); } char a; printf("输入一串字符,以$结束\n"); while(scanf("%c",&a) && a!= '$') { fputc(a,fp); } fflush(stdin); fclose(fp); } int Find(char c) { FILE *fp; int flag = 0; ...

铜陵市15774994400: 在一个数组中查找一个数,用C语言怎么写代码? -
晋咐一干: main() {int a[10];int i,find;bool result;bool find_num(int b[],int j);for(i=0;i<10+i++)scanf("%d",a[i]);/* 输入数组 */scanf("%d",find);/*输入要查找的数*/result=find_num(a,find);if (result==0)printf("the number isnot find\n"); ...

铜陵市15774994400: 用C语言编写一个从普通文本字符串中查找给定字符串(关键词)的程序.(急,求真大神解答) -
晋咐一干: 问题是这样:C语言编写函数int fun(char *s,char *c), 函数的功能是查找母串s中,字串c出现的次数. 答案是这样: #include<stdio.h> #include<string.h> int fun(char*s,char*c) { int i=0,j=0,k,n=strlen(c),a=0; while(s[i]) { if(s[i]==c[j]) { for(k=1;(s[i+k]&&c[...

铜陵市15774994400: 用C语言编写一个快速文件检索程序,检索关键字 -
晋咐一干: 123456789101112 #include<stdio.h> main() { char*ptr, filename[50];/*定义变量及数组为字符型*/ printf("please input the file name you want to search:\n"); scanf("%s", filename);/*输入要查找的文件名*/ if((ptr = searchpath(filename)) != NULL) printf("the path is:%s\n", ptr);/*将文件所在的路径输出*/ else printf("cannot find");/*若文件未找到,输出双引号内提示信息*/ }

铜陵市15774994400: 请编写一个C语言程序实现在多组数据中查找一个元素.这道题怎么做啊! -
晋咐一干: 数据是什么类型的?多组数据又是什么概念,动态的还是固定数量的?给你个M组数据,每组数据有N个整数的例子(M,N你自己定)#include #define M 5#define N 10 main() { int i, j, k; int A[M][N]; for(i = 0; iprintf("请输入第%d组的%d个数据...

铜陵市15774994400: 求C语言查找满足条件的程序 -
晋咐一干: #include <stdio.h> main() { char str[100],ch; int i=0; scanf("%s%c%c",str,&ch,&ch); while(str[i]) { if(str[i]==ch) { printf("%c在%s的第%d位\n",ch,str,i+1); return; } i++; } printf("找不到%c\n",ch); }

铜陵市15774994400: C语言 编写程序,在一个整型数组中查找某个数并将其删除.(要求用指针) -
晋咐一干: #include #include int main() { int i,*p,a[5]={1,2,3,4,5}; p=&a[0]; int num,count; printf("请输入要删除的数字\n"); scanf("%d",&num); for(i=0;i<5;i++) { if(*p++==num) { count=i; } } p=&a[0]; for(i=count;i<4;i++) { *(p+i)=*(p+i+1); *(p+i+1)=null; } p=&a[0]; for(i=0;i<5;i++) { if(a[i]!=0) { printf("%d\n",*p++); } } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网