zzuli oj 1178 单词数
题目描述
统计一篇文章里不同单词的总数。
输入
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由大小写字母和空格组成,没有标点符号,遇到#时表示输入结束。每篇文章的单词数小于1000,每个单词最多由30个字母组成。
输出
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
样例输入
you are my friend
#
样例输出
4
#include <string>// C++ 版
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
string ss;
map<string, int> ma;
int main()
{
char ch;
while (scanf("%c", &ch), ch != '#')
{
if (isalpha(ch))
ss += ch;
else
{
if (ch == ' ')
{
if (!ss.empty())//避免把空格当成单词
{
ma[ss]++;
ss.clear();
}
}
if (ch == '\n')
{
if (!ss.empty())//避免把空格当成单词
{
ma[ss]++;
ss.clear();
}
int ans = ma.size();
printf("%d\n", ans);
ma.clear();
}
}
}
return 0;
}
#include<stdio.h>//纯C版 老版
#include<string.h>
int main()
{
char s[30000],t[33];
int i,n,f,j,k,len,y;
char *ps;
while(gets(s),strcmp(s,"#")!=0)
{
n=1;
for(i=0; i<strlen(s)-1; i++)
{
if(s[i]==' '&&s[i+1]!=' ')
n++;
}
char a[1100][33];
for(i=0;i<1100;i++)
strcpy(a[i]," ");
len=0;
y=0;
ps=s;
for(i=0;i<n;i++)
{
f=0;
sscanf(ps+=len,"%s",t);
len=strlen(t)+1;
for(j=0;j<i;j++)
{
if(strcmp(t,a[j])==0)
{
f=1;
}
}
if(f==0)
{
strcpy(a[y],t);
y++;
}
}
printf("%d\n",y);
}
return 0;
}