c语言试题集(1)
1.通过键盘输入一行英文句子,统计其中的英文字母和单词的数量,单词之间用空格分开(标点符号不算单词)
#include "stdafx.h" //通过键盘输入一行英文句子,统计其中的英文字母和单词的数量,单词之间用空格分开(标点符号不算单词); #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char string[100];//根据拟从键盘输入的字串的长度需要适当调整,要避免输入的长度超出设定的范围。 char c; int i, num = 0, sum = 0, word = 0; //定义 word 用来指示一个单词是不是结束或新单词是否开始; printf("请从键盘输入一行需要查询的英文句子,进行单词数量统计:\n\n"); gets_s(string); //从键盘获得输入的字符串; //以下统计句子中的英文字符个数; for (i = 0; (c = string[i]) != '\0'; i++) //for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='\0',即未到达结束符'\0'的话,执行i++; { if (('A' <= string[i] && string[i] <= 'Z') || ('a' <= string[i] && string[i] <= 'z')) sum++; //以上为条件句,如果字符在A~Z,a~z 范围之内的话,则执行sum++,累加英文字母个数; } //以下统计句子中的英文单词个数; for (i = 0; (c = string[i]) != '\0'; i++) //for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='\0',即未到达结束符'\0'的话,执行i++; { //'\0'用作字符串的结束符。它的ASCII数值是0。 if (c<'A' || c>'Z'&&c<'a' || c>'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); }
2.输入任意一个英文句子,输出最长单词。
思路
1.建立一个足够放下句子的字符串。例如char[100];按照实际情况来确定数组的大小。 2.然后将输入的句子保存到字符串中。 3.开始寻找最长单词: 1)定义一个临时字符串,用于记录单词。 2)再定义一个用于记录最长单词的字符串。 3)开始从英文句子中分离单词,如果遇到非字母结尾的都是一个单词。 4)然后记录该单词的长度,并把单词保存到最长单词字符串中。 5)以此类推,每次遇到比当前字符串长的单词时都要重新保存最长单词字符串。 |
1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 char s[128]; 6 char *p1, *p2; 7 int max = 0, len = 0; 8 printf("Input a string: "); 9 gets(s); 10 p1 = s; 11 for (int i = 0; i <= strlen(s); i++) 12 { 13 if ((s[i] == ' ') || (s[i] == '\0')) // 如果当前字符为空格或结束,则比较当前单词长度是否大于最大值,再将长度复位。 14 { 15 if (len>max) 16 { 17 max = len; 18 p2 = p1; 19 } 20 len = 0; 21 } 22 else // 如果当前字符非空,如果当前长度为0,则表示新单词。 23 { 24 if (len == 0) 25 p1 = &s[i]; 26 ++len; 27 } 28 } 29 while (*p2 && *p2 != ' ') 30 printf("%c", *p2++); 31 }