69,382
社区成员
发帖
与我相关
我的任务
分享
//code 1
void main()
{
char str[81];
int count=0,i;
gets(str);
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ' && str[i+1]>='a' && str[i+1]<='z')//如果一个字符后面是字母,表示一个单词开始
{
count++;
}
}
if(str[0]!=' ')//如果一句话开头不是空格而是单词,上面的方法,会把第一个词漏掉,这里补上
{
count=count+1;
}
printf("There are %d words in the line.\n",count);
}
void main()
{
char string[81];
int i,num=0,word=0;//num单词数累加
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
{
if(c==' ')//c是空格,word置0
{
word=0;
}
else if(word==0)//c不是空格,并且前面一个字符是空格(即word=0),新单词开始,num累加,word置1
{
word=1;
num++;
}
}
printf("There are %d words in the line.\n",num);
}
/*接受输入的前n个字符保存到str中*/
char *getline(char *str, int n)
{
int ch;
int len = 0;
while((ch=getchar()) != '\n' && len < n) {
str[len++] = ch;
}
str[len] = '\0';
return str;
}
个人倾向于用你的第二段代码。
int main()
{
char str[81];
char *taken;
int count=0,i;
gets(str);
taken = strtok( strdup(str)," ");
while (taken != NULL)
{
count ++;
taken = strtok( NULL," ");
}
printf("There are %d words in the line.\n",count);
}