c语言编程 统计输入多个字符串中每个字串出现的次数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编程 统计输入多个字符串中每个字串出现的次数相关的知识,希望对你有一定的参考价值。

参考技术A /*

请输入字符串:qqwAZXS -=09871<>?!llk

有效长度为:23个字符。

k : 1次。
l : 2次。
q : 2次。
w : 1次。
小写字符l出现的次数最多,共2次。

S : 1次。
X : 1次。
Z : 1次。
大写字符L出现的次数最多,共1次。

1 : 1次。
7 : 1次。
8 : 1次。
9 : 1次。

阿拉伯数字;出现的次数最多,共1次。

其他字符共8个。

Press any key to continue
*/
#include <stdio.h>
#include <string.h>

int main()
int i,m,len,others = 0;
int LowerQuantity[26] = 0;
int CapQuantity[26] = 0;
int Arab[10] = 0;
char ch,chs[1024];
printf("\n请输入字符串:");
i = 0;
while((i < 1024) && (ch = getchar()) != '\n')
chs[i] = ch;
i++;

chs[i] = '\0';
len = strlen(chs);
printf("\n有效长度为:%d个字符。\n\n",len);
for(i = 0 ; i < len ; i++)
if((chs[i] >= 'a') && (chs[i] <= 'z')) (LowerQuantity[chs[i] - 'a'])++;
else if((chs[i] >= 'A') && (chs[i] <= 'Z')) (CapQuantity[chs[i] - 'A'])++;
else if((chs[i] >= '0') && (chs[i] <= '9')) (Arab[chs[i] - '0'])++;
else others++;

m = LowerQuantity[0];
for(i = 1 ; i < 26 ; i++)
if(LowerQuantity[i] > 0) printf("%c : %d次。\n",i + 'a',LowerQuantity[i]);
if(LowerQuantity[i] > m)
m = LowerQuantity[i];
ch = i;


if(m > 0) printf("小写字符%c出现的次数最多,共%d次。\n\n",ch + 'a',m);
m = CapQuantity[0];
for(i = 1 ; i < 26 ; i++)
if(CapQuantity[i] > 0) printf("%c : %d次。\n",i + 'A',CapQuantity[i]);
if(CapQuantity[i] > m)
m = CapQuantity[i];
ch = i;


if(m > 0) printf("大写字符%c出现的次数最多,共%d次。\n\n",ch + 'A',m);
m = Arab[0];
for(i = 1 ; i < 10 ; i++)
if(Arab[i] > 0) printf("%c : %d次。\n",i + '0',Arab[i]);
if(Arab[i] > m)
m = Arab[i];
ch = i;


if(m > 0) printf("\n阿拉伯数字%c出现的次数最多,共%d次。\n\n",ch + '0',m);
if(others > 0) printf("\n其他字符共%d个。\n\n",others);
return 0;
参考技术B //////////////////////////////////////////////////////////////////////记得结束时要输入000作为判断,当然你可以自己修改
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct word
int time;
char str[10];
;
struct data
int words;
word s[30];
;
int ishere(data*p,char*str)

for(int i=0;i<p->words;i++)

if(strcmp(str,p->s[i].str)==0)

p->s[i].time++;
return 1;


return 0;

void f(data*p,char*str)

strlwr(str);
if(ishere(p,str)==0)

p->words++;
p->s[p->words-1].time=0;
p->s[p->words-1].time++;
strcpy(p->s[p->words-1].str,str);


void main()

data*a;
char str[40];
char s[10];
int i,j;
int n=0;
a=(data*)malloc(sizeof(data));
a->words=0;
printf("Please input your string:\n\n\n");
gets(str);
i=0;
while(str[i]!='0'||str[i+1]!='0'||str[i+2]!='0')

j=0;
while(str[i]!=' '&&(str[i]!='0'||str[i+1]!='0'||str[i+2]!='0'))

s[j]=str[i];
i++;
j++;
n=1;

s[j]='\0';
if((str[i]!='0'||str[i+1]!='0'||str[i+2]!='0'))

i++;

if(n==1)

n=0;
f(a,s);



for(i=0;i<a->words;i++)

printf("%-8s",a->s[i].str);

printf("\n");
for(i=0;i<a->words;i++)

printf("%-8d",a->s[i].time);


参考技术C int main ( )

char c;
int num=0,word=0;
printf("请输入一行字符:\n");
while((c=getchar( ))!='\n')

if (c==' ') word=0;
else if (word==0)

word=1;
num++;


printf("单词数=%d\n",num);
return 0;

c语言:输入一行字符,统计其中的单词个数,单词之间用空格分开

#include<stdio.h>
void main()

int i,c,num=0,word=0;
char str[40];
gets(str);
for(i=0;c=(str[i])!='\0';i++)
if(c==" ") word=0;
else if(c==word)

word=1;
num++;


printf("%d\n",num);


程序如何修改?

这两个我测试过,符合你的问题
一个是数组,一个是指针,选用指针好些。
#include<stdio.h>
int main()

int num = 0, word = 0, i = 0;
char str[40];
gets(str);
while(str[i] != '\0')

if(str[i] == ' ')

word = 0;

else

if(0 == word)

num++;
word = 1;

else

word = 1;


i++;

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


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

int num = 0, word = 0;
char *str = NULL;
str = (char *)malloc(sizeof(char)*40);
gets(str);
while(*str != '\0')

if(*str == ' ')

word = 0;

else

if(0 == word)

num++;
word = 1;

else

word = 1;


str++;

printf("%d\n",num);
return 0;
参考技术A 说实话,我真怀疑你是改了程序来刷分的……
程序主要在这几个地方有问题:
#include<stdio.h>
void main()

int i,c,num=0,word=0;
char str[40];
gets(str);
for(i=0;(c=str[i])!='\0';i++)//你的源程序是先比较后赋值
if(c==' ') //c只能和字符比较,不能和字符串比较
word=0;
else if(word==0)//word是状态,你那句在干嘛?

word=1;
num++;


printf("%d\n",num);
参考技术B #include<stdio.h>
void main()

int i,c,num=0,word=0,flag=0;
char str[40];
gets(str);
for(i=0;c=(str[i])!='\0';i++)
if(c==' ')

if(flag==1)//排除前几个都是空格

word++;
flag==0;//消除中间出现连续空格


else

flag=1;//标志找到第一个不是空格的字符和下一个单词开始



printf("%d\n",world);
参考技术C 关键代码:做了两次才做成
#include "stdio.h"
#include "string.h"
void main()

char string[100];
int i=0,sum=0,flag=0;
gets(string);
while(string[i]!='\0')

if(flag==1 && string[i]!=' ')

++i;
continue;

if(string[i]==' ')

flag=0;
++i;

else

flag=1;
sum+=1;
++i;



printf("The word numbers is %d\n",sum);

以上是关于c语言编程 统计输入多个字符串中每个字串出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

算法训练 字串统计

编程: 输入一个字符串,统计该字符串中每个字母出现的次数,并按出现次数降序的输出每个字母。

算法训练 字串统计

C语言编程:输入一串英文字母,统计每个字母(不区分大小写)出现的次数

试题 算法训练 字串统计

c语言编程。从标准输入设备上输入一个字符串,分别统计其中每个数字,空格,字母及其他字符出现的次数。