字母的个数
时间: 1ms 内存:128M
描述:
小琰在这学期的C语言学习之路上过关斩将,学到了知识,更是收获了成功的喜悦;这不,老师的新任务又来了,可是小琰偏偏卡在了这道数数的题上:
题目中给了一串字符,要求你找出来这串字符里有多少个单词,有多少个空格,还要找出出现在字符串中各个英文字母(区分大小写)的个数,字符串的开头和结尾没有空格字符,而且每个单词之间也仅有一个空格字符...
1,2,3,4,5......小琰数着数着就乱了,快来帮帮小琰吧!
输入:
一串字符,字符的长度不会超过50。
输出:
字符串中单词,各个英文字母以及空格的个数。
示例输入:
I like C language
示例输出:
单词个数:4
C:1
I:1
a:2
e:2
g:2
i:1
k:1
l:2
n:1
u:1
空格:3
提示:
参考答案(内存最优[1120]):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 1000
int a[4][26];
void kongge(char b[],int &n)
{
int i=0;
for(i=0;b[i]!='\0';i++)
if(b[i]==' ')
n++;
}
void check(char b[])
{
int i;
for(i=0;b[i]!='\0';i++)
{
if(b[i]>='a' && b[i]<='z')
{
a[3][b[i]-'a']++;
}
else
a[1][b[i]-'A']++;
}
}
int main()
{
int i,n,l,kong=0,danci=0,k;
for(i=0;i<26;i++)
{
a[1][i]=0;
a[3][i]=0;
a[0][i]='A'+i;
a[2][i]='a'+i;
}
char b[50];
gets(b);
l=strlen(b);
kongge(b,kong);
danci=kong+1;
printf("单词个数:%d\n",danci);
check(b);
for(i=1;i<4;i=i+2)
for(k=0;k<26;k++)
{
if(a[i][k]!=0)
{
printf("%c:%d\n",a[i-1][k],a[i][k]);
}
}
printf("空格:%d\n",kong);
}
参考答案(时间最优[3]):
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
char str[1024];
map<char , int>mmp;
int main(void)
{
scanf("%[^\n]", str);
int len = strlen(str);
int space = 0;
for(int i = 0 ;i < len; i++){
if(str[i] == ' ') space++;
else mmp[str[i]]++;
}
printf("单词个数:%d\n", space + 1);
map<char, int>::iterator iter;
for(iter = mmp.begin() ;iter!=mmp.end() ;iter++){
printf("%c:%d\n", iter->first, iter->second);
}
printf("空格:%d", space);
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。