您的位置:首页 > 其它

HDOJ2072单词数

2017-07-14 11:04 274 查看
Problem Description

lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。

Input

有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。

Output

每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。

Sample Input

you are my friend

#

Sample Output

4

AC代码

#include<stdio.h>
#include<string.h>
int main(){
int n,i,len,k,t,j;
char s[1000];
char str[100][100];
while(gets(s)&&s[0]!='#'){
n=0;
char *p;
p=strtok(s," ");
for(k=0;p!=NULL;k++)
{
strcpy(str[k],p);
p=strtok(NULL," ");
}
//用strtok函数分解字符串------------------------------------

for(i=0;i<k;i++){
for(j=i+1;j<k;j++) {
if(strcmp(str[i],str[j])==0){
n++;//n为重复的单词
break;
}
}
}
printf("%d\n",k-n);
}
return 0;
}


我开始用自己写的函数分解字符串,将每个单词存入二维字符数组中,结果超时:

超时代码:

#include<stdio.h>
#include<string.h>
int main(){
int n,i,len,k,t,j;
char s[1000];
char str[100][100];
while(gets(s)&&s[0]!='#'){
n=0;
len=strlen(s);
k=0;
for(i=0;i<len;i++){
t=0;
if(s[i]!=' '){
while(s[i]!=' '){
str[k][t++]=s[i];
i++;
}
k++;
}
else
i++;
}   //将每个单词存入str数组中;
//分解字符串------------------------------------

for(i=0;i<k;i++){
for(j=i+1;j<k;j++) {
if(strcmp(str[i],str[j])==0){
n++;//n为重复的单词
break;
}
}
}
printf("%d\n",k-n);
}
return 0;
}


strtok函数的使用:

Strtok()函数详解:

  该函数包含在”string.h”头文件中

函数原型:

char* strtok (char* str,constchar* delimiters );

函数功能:

  切割字符串,将str切分成一个个子串

函数参数:

  str:在第一次被调用的时间str是传入需要被切割字符串的首地址;在后面调用的时间传入NULL。

  delimiters:表示切割字符串(字符串中每个字符都会 当作分割符)。

函数返回值:

  当s中的字符查找到末尾时,返回NULL;

  如果查不到delimiter所标示的字符,则返回当前strtok的字符串的指针。

  

#include<stdio.h>
#include<string.h>
int main(void)
{
char buf[]="hello@boy@this@is@heima";
char*temp = strtok(buf,"@");
while(temp)
{
printf("%s ",temp);
temp = strtok(NULL,"@");
}
return0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: