谁能帮一下,真是想不出来了?
c++
小明正在阅读一篇英语短文。为了方便学习生词,他希望能够找到每个不同单词与其在文中出现的次数,然后他觉得工作量太大了,你能用程序帮他完成吗?已知这篇文章总的单词数为n,单词忽略大小写,即:dad, DAD, Dad 算同一个单词。
输入
第一行输入一个数n,表示这篇文章总的单词数,其中 n<=100000。
第二行输入一个由'a-z','A-Z'以及空格组成的字符串,表示这篇文章,其中每个单词长度<=10。
输出
第一行输出一个正整数m,表示文中不同单词的数量;
之后按照字典序输出m行,每行一个字符串和一个数字以空格隔开,其中字符串仅由'a-z'的小写字母组成,表示这个单词;数字表示文中这个单词出现的次数。
数据范围
对于100%的数据,n<=100000,每个单词长度<=20。
输入样例
18
You better lose yourself in the music the moment You own it you better never let it go
输出样例
13
better 2
go 1
in 1
it 2
let 1
lose 1
moment 1
music 1
never 1
own 1
the 2
you 3
youself 1
#include<bits/stdc++.h>
using namespace std;
char **words, word[11];
int *num;
int n, i, m = 0, j = 0, t;
int main()
{
cin >> n;
words = new char *[n];
num = new int[n];
memset(num, 0, n * sizeof(int));
for(i = 0; i < n; i++)
{
words[i] = new char[11];
memset(words[i], 0, 11);
}
for(i = 0; i < n; i++)
{
cin >> word;
j = 0;
while(word[j] != 0)
{
if(word[j] >= 'A' && word[j]<='Z')
word[j] += 32;
j++;
}
for(j = 0; j < m; j++)
if(strcmp(word, words[j]) == 0)
break;
if(j == m)
{
strcpy(words[m], word);
num[m] = 1;
m++;
}
else
num[j]++;
}
for(i = 0; i < m - 1; i++)
{
for(j = 0; j < m - i - 1; j++)
{
if(strcmp(words[j], words[j + 1]) > 0)
{
t = num[j];
num[j] = num[j + 1];
num[j + 1] = t;
strcpy(word, words[j]);
strcpy(words[j], words[j + 1]);
strcpy(words[j + 1], word);
}
}
}
cout << m << endl;
for(i = 0; i < m; i++)
cout << words[i] << ' ' << num[i] << endl;
return 0;
}