C中统计子串个数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C中统计子串个数相关的知识,希望对你有一定的参考价值。
编 写 程 序,统 计 给 定 的 字 符 串 array 中 包 含 的 指 定 子 串sub 的 个 数。例 如 统 计“abceifgheiflaideifsh”中 子 串“eif”的个 数 为 3。
要求两个串均由键盘录入。
要求两个串均用字符型数组存放:char array[20], sub[10];
新手,实在想不出什么好算法,自己想了一个将主串分组的办法,执行老出错……
#include <string.h>
long GetTimes(char *pMain, char *pSub)
long times = 0;
long mainLen = strlen(pMain);
long subLen = strlen(pSub);
for(long i = 0; i <= mainLen - subLen; i ++)
int flag = 1;
for(long j = 0; j < subLen; j ++)
if(pMain[i + j] != pSub[j])
flag = 0;
break;
if(flag)
times ++;
return times;
int main()
//char str[20]="abcabc";
char* str="abceifgheiflaideifsh";//你给的字符串用20个大的数组放不下
char subStr[10]="eif";
printf("出现次数为%d\n",GetTimes(str,subStr));
return 0;
参考技术A 从第一个逐一比较,完全匹配后,+1,继续匹配。
比如 abceifgheiflaideifsh
a!=e,下一个,b!=e...
到了e=e,看下一个i=i,f=f,于是匹配了,+1
又从g开始。。
当然,这种效率并不算最好,但一般的数据完全能够应付。
如果数据比较苛刻。可以参见kmp算法 参考技术B #include <stdio.h>
#include <string.h>
int compara(char arr[],char sub1[]);
void main()
char array1[20],sub[10];
printf("请输入array:\n");
gets(array1);
printf("请输入sub:\n");
gets(sub);
int sum=0;
sum=compara(array1,sub);
printf("子串个数为%d\n",sum);
int compara(char arr[],char sub1[])
int sum=0;
int k=1;
int lenarr;
lenarr=strlen(arr);
int lensub1;
lensub1=strlen(sub1);
if(lenarr<lensub1)
return 0;
for(int i=0;i<lenarr;i++)
k=1;
if(arr[i]==sub1[0])
for(int j=0;j<lensub1;j++)
if(k==0) break;
if(arr[i+j]!=sub1[j])
k=0;
if(k==1) sum++;
return sum;
/*明天再给你加注释哈*/
shell中统计某个文件中字段的个数
比如t.txt下是这样的字段:
11#ss
22#dd
11#ff
请问,怎么统计第1列的数据的个数,比如11、22在文件中的个数?
cut -d'#' -f1 1.txt |sort | uniq -c
cut -d'#' -f1 1.txt ##这句话的作用是输出第一个字段
cut -d'#' -f1 1.txt | sort ## 把输出的字段做一个排序
cut -d'#' -f1 1.txt | sort |uniq -c ##计算重复个数,也就是你要的统计结果
这是我这边的执行结果:
参考技术A cat t.txt | grep "11" | wc -l打印t.xt | grep 过滤出11 | 统计11 出现的次数
grep "22" t.txt | wc -l追问
这种方法我也知道,如果你不知道你要统计是11呢?
我想要实现的功能类似与sql中的select xxx,count(*) from xxx group by xxx
我不会数据库,对sql语句不了解。
追问没关系,也非常感谢您能回答。呵呵……
以上是关于C中统计子串个数的主要内容,如果未能解决你的问题,请参考以下文章