#include&ltstdio.h&gt
#include&ltstring.h&gt
#include&ltstdlib.h&gt
main()
{
char string[100]//根据拟从键盘输入的字串的长度需要适当调整,要避免输入的长度超出设定的范围。
char c
int i,num=0,sum=0,word=0//定义word用来指示一个单词是不是结束或新单词是否开始
printf("请从键盘输入一行需要查询的英文句子,进行单词数量统计:\n\n")
gets(string)//从键盘获得输入的字符串;
//以下统计句子中的英文字符个数;
for(i=0(c=string&lti&gt)!='\0'i++)//for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='\0',即未到达结束符'\0'的话,执行i++
{
if(('A'&lt=string&lti&gt&&string&lti&gt&lt='Z')||
('a'&lt=string&lti&gt&&string&lti&gt&lt='z'))
sum++//以上为条件句,如果字符在A~Z,a~z范围之内的话,则执行sum++,累加英文字母个数
}
//以下统计句子中的英文单词个数;
for(i=0(c=string&lti&gt)!='\0'i++)//for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='\0',即未到达结束符'\0'的禅散话,执行i++
{//'\0'用作字符串的结束符。它的ASCII数值是0。
if(c&lt'A'||c&gt'Z'&&c&lt'a'||c&gt'z')//设定条件:如果字符c遇到A~Z和a~z范围之外其它符号字符的话,包括遇到空格'';
word=0//上面条件为真时,执行这里,置word=0,表示未遇到单词,或一个单词已结颤猜束,同时也意味着要开始遇到下一个新单词
else if(word==0)//当条件(word==0)为真,执行下面花括号里面的语句;
当word==0时,表示未遇到字母,即未遇到单词,或上一个单词已结束;
{
word=1//那么置word=1,即,表示下一个新单词开始,
num++//执行num++,累加英文单词的个数
}
}
printf("\n")
printf("您输入的这句英文句子中共包含%d个英文字符,%d个英文单词。\n",sum,num)
}
示例:输入语句:Hello!My friend,how are you?(注意单词的前后有空格贺洞氏)
扩展资料:
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include&lt文件名&gt
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。
如下例所示:
#include&ltmath.h&gt//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函。
Q:输入一串字符串,输出其中有多少个单词。
Eg:Good Wishes
A:
#include <stdio.h>#include <string.h>#define SIZE 20int main()
{ char str[SIZE]={'\0'} int count=0
printf("plz input the string\n")
gets(str)
puts(str) int length = strlen(str) for (int i=0i<lengthi++)
{
if(str[i]!=' ')
{ count++ while(str[i]!=' '&&str[i]!='\0')
{
i++
}
}
}
printf("%d\n",count) return 0
}
‘\0’和‘0’的区别:
在c语言中,它们都是字符,都用对应的ASCII码来存储。例如第一个ASCII码,0,对应字符为(Null),就是 ‘\0’,即空字符。我们在c语言中判断一个字符串是否结束的标志就是看是否遇到‘\0’,如果遇到‘\0’,则表示字符串结束。字符‘0’和数字0的区别:前者是字符常量,后者是整形常量,但是字符常量可以像整数一样在程序中参与相关运算。
扩展资料字符串所有字符,如果当前字符不为空,单词数+1,再嵌套一个while循环,判断当前单带孙词是谈芦否结束。
#include <stdio.h>
#include <含行带string.h>
int count_words(char* s)
{
int len=strlen(s)
int count,i
for(i=0i<leni++)
{
if(*(s+i)!=' '){ // 如果当前代码不为空
count++ //单词数+1
while(*(s+i)!=' '&&i<len) //判断当前单词是否结束
i++
}
}
return count
}
int main()
{
char* a="i love you"
printf("%d",count_words(a))
}
根据英语的书写习惯,在每个单词前后都会有空格分隔。 所以可以依据空格来划分单词。
不过,由于空格可能存在连续多个,所以仅统衡嫌搏计空格数是不可以的,需要更复杂一些的算法。
一、算法设计:
核心思想是通过一个flag,来确定单词的起始, 每出现一个单词的起始,则表示存在一个单词。 这样统计出现的单词起始个数,即可获得单词总数。
1、flag初始为1;
2、遍历字符串。
3、对于每个字符,如果出现非空格字符,且flag为1,则为单词起始,累加计数器。同时赋值flag为0。
4、在flag为0情况下,如果出现空格,表示上一个单词已经结束,设置flag为1。
5、 遍历结束后输者高出结果。
二、参考代码:
#include <stdio.h>int main()
{
char s[200]
int i,n=0,flag=1
gets(s)//输入字符串。
for(i = 0 s[i] i ++)//遍历
{
if(flag == 1)
咐祥 {
if(s[i] != ' ')//单词起始
{
n++
flag = 0
}
}
else if(s[i] == ' ')//上一个单词结束。
flag = 1
}
printf("%d\n", n)//输出结果。
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)