求解,用C语言编写一个程序,查找一个字符串在另一个字符串中出现的次数,谢谢大家了!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解,用C语言编写一个程序,查找一个字符串在另一个字符串中出现的次数,谢谢大家了!相关的知识,希望对你有一定的参考价值。
大家能用最简单的数组方法来解这个问题吗?我是初学者!
//第一种
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)
#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;
本回答被提问者和网友采纳 参考技术B #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;
参考技术C
#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);
参考技术D #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;
以上是关于求解,用C语言编写一个程序,查找一个字符串在另一个字符串中出现的次数,谢谢大家了!的主要内容,如果未能解决你的问题,请参考以下文章
怎样用c语言编写一个程序,实现查找一个字符串中的特定字符,并将其删除?
c语言编写一个程序,实现查找一个字符串中的特定字符,并将其删除.