C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开相关的知识,希望对你有一定的参考价值。

#include <Studio.h>

main()



char string 〔 81 〕 ;

int i , num=0 , word=0;

char c; getS(String);

for (i=0;(c=String 〔 i 〕 )!=' \ 0';i++)

if(c=='') word=0;

else

if(word==0)

word=1; num++;

printf("There are %d wordS in the line. \ n" , num);



运行情况如下:

I am a boy.

There are 4 words in the line.

就是这里的if(c=='') word=0;

else

if(word==0)

word=1; num++;

看不懂啊 开头如果c==‘’就说明出现单词word=0是表示未出现单词 但是下面word==0了 是怎么回事啊 还有这个循环是怎么循环的哦 麻烦详细点 详细 详细 详细 详细 谢谢 我是菜鸟 很笨。问题补充:

还有就是word==0为什么是表示输入得是前一个字符为空格 关键就在这里啊 一定要详细点 谢谢 谢谢 谢谢 谢谢 一楼的我看不很明白 不够详细 关键点要说清楚啊 麻烦各位了啊

#include<stdio.h>

int main()

intword,num=0;

char ch;

while((ch=getchar())!='\n')

if(ch=='')

word=0;

else

if(word==0)

num++;

word=1;

printf("%d",num);

return0;

扩展资料:

分析

若当前字符=空格

YESﻩ未出现新单词,使word=0,num不累加

NOﻩ前一字符为空格(word=0),新单词出现,使num加1,word=1

前一字符为非空格(word=1),未出现新单词,num不加1*/

其它方法:

#include<stdio.h>

int main()

char string[81];

int i,num=0,word=0;

char c;

gets(string);

for(i=0;((c=string[i])!='\0');i++)

if(c=='')word=0;

elseif(word==0)

word=1;

num++;

printf("thereare%dwordsinthisline.\n",num);

return0;

参考技术A #include<stdio.h>
int main()

    char string[81];
    int i,num=0,word=0;
    char c;
    gets(string);
    for(i=0;(c=string[i])!='\\0';i++)
        if(c==' ')word=0;
        else if(word==0)

word=1;
num++;

printf("There are %d words in the line.\\n",num);
return 0;

参考技术B 这为朋友,很少在电脑上调程序吧,这段程序中有一些值得注意的错误。首先,标准输入输出头文件是#include<stdio.h>,第二、数组string后是中括号,应该是string[81],第三,string和String是不同的,c语言区分大小写,最后一个问题,编程时所有符号一律用英文输入,这个虽然是小问题,但一开始就应养成良好的习惯。
下面是我改好的程序:
#include<stdio.h>
main()

char string[81];
int i,num=0,word=0;
char s;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ') word=0;
else
if(word==0)
word=1;num++;
printf("There are %d wordS in the line.\n",num);

好了,言归正传。这段程序有个值得注意的问题,for循环没有大括号,意味着它包含一个if-else语句,if语句中是c=' '表示一个单词的结束,然后用word标记,word=0时表示有一个完整的单词。当读入到下一个字母时,表示又有一个新的单词,所以if(word==0)时,num++,同时将word取消标记准备下一次标记。比如说:
输入I am a boy.
I读入:因为word==0 所以num=1,word=1
读入一个空格:word=0 说明第一个单词读入完毕
a读入:因为word==0 所以num=2,word=1 说明有第二个单词
m读入:word=1 说明第二个单词未读完
读入一个空格 word=0 说明第二个单词读入完毕
a读入 因为word=0 说明有第三个单词 所以 num=3,word=1
以此类推,得到结果为4
参考技术C 你弄的太乱,我整理了一下:
#include<stdio.h>
main()
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ') word=0;
else if(word==0)
word=1;
num++;

printf("There are %d words in the line. \n" ,num);


你说的这句
if(c==' ') word=0;
else if(word==0)
word=1;
num++;

当c=空格时,令word=0;不执行else if语句
直到c!=空格时(注意连续多个空格的处理),不执行if语句,执行else if语句
由于前面令word=0,所以到空格后第一非空格字符时,word是=0的,else if判断成功,
执行word=1; num++;,第二个非空格字符时,word就=1了,就不执行word=1; num++;了
这样一个单词num就加一次
由于初始时令word=0,故第一单词的第一个字母时,num就等于1了

好了,就说这么多,不懂再问我本回答被提问者采纳
参考技术D 首先要知道C中选择控制语句if--else语句的配对,C语言规定else与其前面最近的一个没有配对的if成对。这题中很显然第一个if与下面的else配对。第一个if语句意思是说:如果C中的值是‘空格’则将0值给word,下面紧跟着一个else,如果C中的值不是空格,就执行第二个if。第二个if意思是说如果word中的值是哦,就把1给word,然后对num加一。
理解上面的关系你就很容易理解这里面变量word的含义了。其实word这个变量仅仅是一个单词输入完的一个标志。当输入一个单词,输入空格时,程序中word等于0,接着执行else,直接转入执行第二个if,此时判断word是不是等于0,如果等于零说明C中的值是空格,及一个单词已经输入完,此时就对word置一,为下次判断做准备,然后对num加一。如果再输入一个新的单词,当没有输完时,及C中的值不是空格,此时第一个if不执行,执行else,接着又执行第二个if。但此时word的值是1,因此第二个if也不执行,即num不会加一。
体会一下吧,希望对你有所帮助。

c语言简单问题,输入一行英文,提取其中的单词。总是有个错误找不到,麻烦高手

#include "stdio.h" //输入一行英文,提取其中所有的单词。
#include "string.h"
int isKeyWord(char c)
if(c>='a'&&c<='z'||c>='A'&&c<='Z'||'_')
return 1;
else
return 0;

void main()
char s1[256];
char allword[16][16];
char word[16]; //?
int i,k,a=0,flag;
printf("please input data:\n");
gets(s1);
k=0;
flag=0;
//puts(s1);
for(i=0;s1[i]!='\0';i++)

if(isKeyWord(s1[i]))

word[k++]=s1[i];
flag=1;

else if(flag==1)

word[k]='\0';
flag=0;
strcpy(allword[a++],word);
k=0;


for(i=0;i<a;i++)
printf("%s",allword[i]);

参考技术A //int isKeyWord(char c)函数错误。
#include "stdio.h" //输入一行英文,提取其中所有的单词。
#include "string.h"
int isKeyWord(char c)//这样不一定计算完所有的条件,即可正确返回,而且容易分析,还好看
if((c-'A')<0 )return 0;
if((c-'A')<26)return 1;
if((c-'a')<0 )return 0;
if((c-'a')<26)return 1;
return 0;


void main()
char s1[256];
char allword[16][16]='\0';
char word[16];
int i,j,a=0,m=0,n=0,flag;
printf("please input data:\n");
gets(s1);

flag=0;

for(i=0;s1[i]!='\0';i++)

if(isKeyWord(s1[i]))

allword[m][n]=s1[i];
n++;
flag=0;

else

if(flag==0)//遇到第一个空格
m++;//下一个字符串
flag=1;
n=0;

//后面的空格倍跳过



printf("\n 字符串个数:%3d\n",m+1);

for (i=0;i<=m;i++)

printf("%s\n",&allword[i][0]);



参考技术B 看带注释的地方

#include "stdio.h" //输入一行英文,提取其中所有的单词。
#include "string.h"
int isKeyWord(char c)
if(c>='a'&&c<='z'||c>='A'&&c<='Z'|| c=='_')/////这行改一下,判断为下划线的地方
return 1;
else
return 0;

void main()

char s1[256];
char allword[16][16];
char word[16]; //?
int i,k,a=0,flag;
printf("please input data:\n");
gets(s1);
k=0;
flag=0;
//puts(s1);
for(i=0;s1[i]!='\0';i++)

if(isKeyWord(s1[i]))

word[k++]=s1[i];
flag=1;

else if(flag==1)

word[k]='\0';
flag=0;
strcpy(allword[a++],word);
k=0;


if(flag==1)//////////////这个我新加的,有一种情况你没考虑到

//如果刚好到字符串结束了,循环退出,但是这个字符串你没有保存到allwords
word[k]='\0';
strcpy(allword[a++],word);


for(i=0;i<a;i++)
printf("%s\n",allword[i]);///加个回车好看
本回答被提问者采纳
参考技术C #include "stdio.h" //输入一行英文,提取其中所有的单词。
#include "string.h"
int isKeyWord(char c)
if(c>='a'&&c<='z'||c>='A'&&c<='Z'||c=='_')/*****/
return 1;
else
return 0;

void main()
char s1[256];
char allword[16][16];
char word[16]; //?
int i=0,k=0,a=0,flag;
printf("please input data:\n");
gets(s1);
k=0;
flag=0;
//puts(s1);
for(i=0;;i++)

if(isKeyWord(s1[i]))

word[k++]=s1[i];
flag=1;

else if(flag==1)

word[k]='\0';
flag=0;
strcpy(allword[a++],word);
k=0;
if(s1[i]=='\0')break;


for(i=0;i<a;i++)
printf("%s\n",allword[i]);
参考技术D if(c>='a'&&c<='z'||c>='A'&&c<='Z'||'_')错了,返回始终是正确的
改成:if(c>='a'&&c<='z'||c>='A'&&c<='Z'||c=='_')
第5个回答  2011-10-29 if(c>='a'&&c<='z'||c>='A'&&c<='Z'||'_') 这里的问题!!!
改成:
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')|| c=='_')

以上是关于C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开的主要内容,如果未能解决你的问题,请参考以下文章

C语言:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

C语言:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

C语言,输入一行英文字母,统计其中有多少个单词,单词之间用空格分隔.

输入一个字符串,统计其中包含的单词个数,假设单词与单词之间用空格分隔。

c语言中,输入n行字符,统计其中有多少个单词,单词之间用空格分隔开?

c语言以键盘输入一串英文字符串,给各个单词之间以空格分开,统计其中有多少个英文单词(用基础方法做 急