字母的个数

时间: 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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。