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("请从键盘输入一行需要查询的英文句子,进行单词数量统计:

");
    gets_s(string);   //从键盘获得输入的字符串; 
                    //以下统计句子中的英文字符个数; 
    for (i = 0; (c = string[i]) != ''; i++) //for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='',即未到达结束符''的话,执行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]) != ''; i++) //for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!='',即未到达结束符''的话,执行i++; 
    {                              //''用作字符串的结束符。它的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("
");
    printf("您输入的这句英文句子中共包含%d个英文字符,%d个英文单词。
", 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] == '')) // 如果当前字符为空格或结束,则比较当前单词长度是否大于最大值,再将长度复位。
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 }
原文地址:https://www.cnblogs.com/phix/p/7103176.html