标题:用C语言输出英文单词的个数
只看楼主
小人儿
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-10-31
结帖率:33.33%
 问题点数:0 回复次数:5 
用C语言输出英文单词的个数
IV. 计算单词个数:
键盘输入一段英文句子,以#号结束。试着统计这段话中单词的个数。注意,每个单词中允许出现多个空格。
提示:
1.    利用scanf读取缓冲区的性质,在循环体中使用scanf(“%c”,&c),即可一次性输入句子,回车后读取所有字符输入;请大家编程体会:
while(c!=’#’)
{
     scanf(“%c”,&c);//或getchar(c)
     printf(“%c”,&c);//或putschar(c)
}
2. 当连续读取的两个字符依次为空格和字母时,则是新单词的开始,单词计数加1。为实现此功能,可以设置一个变量flag,初值为0,之后如下计算:
a) 当新字符为字母时,flag赋值1,否则赋值0;
b) 如果flag由0变为1,则计数加1;
搜索更多相关主题的帖子: 英文 个数 C语言 字符 单词 
2019-11-06 20:24
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
char m[10][30]={'\0'};
char word[100][30]={'\0'};
int mark[300];
char word2[100][30]={'\0'};
int i,j,l=0;
int p,q,r,s,t;
int flag=1;
int flag2=0;
int time[100];
for(i=0;i<100;i++)
{
time[i]=0;
}
int sum=0;
int sum1=0;

 for(i=0;i<10;i++)
{
gets(m[i]);
flag++;
if(strcmp(&m[i][0],"\0")==0)
{
break;
}
}
for(i=0;i<10;i++)
{
for(j=0;j<30;j++)
{
if(m[i][j]>=97&&m[i][j]<=122)
{
m[i][j]=m[i][j]-('a'-'A');
}
if(m[i][j]>=65&&m[i][j]<=90)
{
mark[l]=1;
}
else
{
mark[l]=0;
}
l++;
}
}
i=0;
j=0;
r=0;
s=0;
for(p=0;p<300;p++)
{
if(mark[p]==1&&mark[p+1]==1)
{
word[r][s]=m[i][j];
s++;
}
if(mark[p]==1&&mark[p+1]==0)
{
word[r][s]=m[i][j];
r++;
s=0;
sum++;
}

 j++;

 if(j==30)

 {
j=0;
i++;
}
}
for(i=0;i<sum;i++)
{
strcpy(word2[i],word[i]);
}
sum1=sum;

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

 {
for(j=i+1;j<sum1;j++)
{
flag2=0;
for(t=0;t<30;t++)
{
flag=1;
if(word[i][t]==word[j][t])
{
flag=0;
}
flag2+=flag;
}
if(flag2==0)
{
for(r=j;r<sum1;r++)
{
strcpy(word[r],word[r+1]);
}
sum1--;
j=i;
}
}
}
r=0;
flag2=0;
flag=1;
int flag3=0;
while(r<sum1)
{
flag3=0;
for(i=0;i<sum;i++)
{
if(strcmp(word[r],word2[i])==0)
{

flag3++;
}
}
time[r]+=flag3;
r++;
}
printf("\n总数:");
printf("%d\n",sum);
for(i=0;i<sum1;i++)
{
puts(word2[i]);
printf("-----次数:");
printf("%d",time[i]);
printf("\n");
}
}
2019-11-07 13:51
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
程序代码:
#include<stdio.h>

int main()
{
    char c,num=1,flag=0;

    printf("请输入一串英文:");
    do
    {
        scanf("%c",&c);
        printf("%c",c);

        if((c!=' ')&&(flag==1))
            num++;

        if(c==' ')
            flag=1;
        else
            flag=0;
    }while(c!='#');

    printf("单词数量为:%d",num);
    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-07 16:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以#号结束
这题,我最疑惑的地点就是为什么要“以#号结束”,很诡异的需求。我怀疑作者不会操作控制台,于是想出了这么个“天才(ruo zhi)”的主意。就是以回车结束也好呀。

程序代码:
#include <iostream>

int main( void )
{
    unsigned count = 0;
    for( char t; scanf(" %*[^\t\n\v\f\r #]%c",&t)==1 && ++count && t!='#'; );
    printf( "%u\n", count );
}

2019-11-07 16:34
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
回复 4楼 rjsp
%*[^\t\n\v\f\r #]

求解这一长串子是做什么用的

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-07 16:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 5楼 纯蓝之刃
%[^ab] 表示读取字符串(这个字符串可能包含空白字符),直到遇到 字符a 或 字符b
“\t\n\v\f\r ”是标准的6个空白字符,分别是 水平制表、换行、垂直制表、换页、回车、空格。当然题目中只要求处理“空格”就行了,但我想如果遇到“制表符”等等怎么办?明显是单词分隔呀,于是我将所有空白字符都加上,反正加上后也不违背题意。
%[^\t\n\v\f\r #] 表示读取一个字符串,直到遇到 空白字符 或 #号。
%*[^\t\n\v\f\r #] 表示忽略一个字符串,直到遇到 空白字符 或 #号。
收到的鲜花
2019-11-07 16:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497649-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.320442 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved