7-240 最长的单词

该篇文章介绍了一个C语言程序,用于读取多行字符串,并在每行中找出最长的单词。程序通过isLetter函数判断字符是否为英文字母,findLongestWord函数遍历字符串,查找并输出最长的单词,忽略标点符号。在每行中,如果存在多个相同长度的最长单词,程序将输出最先出现的一个。
摘要由CSDN通过智能技术生成

输入一个字符串,将此字符串中最长的单词输出。要求至少使用一个自定义函数。

输入格式:

测试数据有多组,处理到文件尾。每组测试数据输入一个字符串(长度不超过80)。

输出格式:

对于每组测试,输出字符串中的最长单词,若有多个长度相等的最长单词,输出最早出现的那个。这里规定,单词只能由大小写英文字母构成。

输入样例:

Keywords insert, two way insertion sort,
Abstract This paper discusses three method for two way insertion
words. insert, two way sorted.
You're a boy.

输出样例:

insertion
discusses
insert
You

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

思路

  1. isLetter 函数用于判断一个字符是否是英文字母。如果是,则返回 1;否则返回 0。
  2. findLongestWord 函数查找一行字符串中最长的单词并输出。它接受一个指向字符串的指针作为参数。
  3. 在 findLongestWord 函数中,首先初始化了三个变量:最长单词长度 maxlen、最长单词起始位置 start 和最长单词结束位置 end。同时,初始化一个循环变量 i 和输入字符串的长度 n
  4. 然后进入外层 while 循环,它负责处理每个单词。在每次循环前,内部变量 maxlen 被重置为 0 以便容纳新单词的长度。开始时,循环变量 i 指向当前单词的第一个字母的位置。
  5. while 循环内部有两个嵌套的 while 循环。第一个 while 循环跳过字符不是英文字母的字符,直到找到一个单词的第一个字母。如果整个字符串都被扫描完,则退出外层循环。
  6. 找到第一个字母后,开始第二个嵌套的 while 循环。它处理当前单词中所有英文字母,直到扫描完了整个单词或者扫描到了非英文字母为止。
  7. 计算当前单词的长度,并与已知最长单词长度 maxlen 进行比较。如果当前单词更长,则更新最长单词长度和起始/结束位置。
  8. 将循环变量 i 移动到下一个单词的开头,然后返回步骤 6 (可能会直接跳过这一步而退出外层循环)。
  9. 最后按字符串 (start,end) 的范围输出最长单词。
  10. 主函数从标准输入逐行读入字符串,并调用 findLongestWord 函数查找并输出每行中最长的单词。程序在结束之前返回值 0。

代码

#include <stdio.h>
// 判断字符是否是英文字母
int isLetter(char c) {
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
// 查找一行字符串中最长的单词并输出,不包括标点符号
void findLongestWord(char* str) {
    int maxlen = 0, start = 0, end = 0;
    int i = 0, n = strlen(str);
    while (i < n) {
        // 跳过单词前的非字母字符
        while (i < n && !isLetter(str[i])) {
            i++;
        }
        if (i == n) 
            break; // 已处理完所有单词
        // 计算当前单词的长度
        int j = i;
        while (j < n && isLetter(str[j])) {
            j++;
        }
        int len = j - i;

        // 更新最长单词及起始/结束位置
        if (len > maxlen) {
            maxlen = len;
            start = i;
            end = j;
        }
        i = j; // 处理下一个单词
    }
    // 输出最长的单词
    for (int i = start; i < end; i++) {
        putchar(str[i]);
    }
    putchar('\n');
}
int main() {
    char str[81]; // 假设输入字符串长度不超过 80
    while (fgets(str, sizeof(str), stdin)) { // 每次读入一行
        findLongestWord(str); // 查找并输出最长单词
    }
    return 0;
}

以下是一个简单的C语言程序,用于对从键盘输入的7-11英文单词进行排序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_WORDS 11 #define MAX_WORD_LENGTH 20 int main(void) { char words[MAX_WORDS][MAX_WORD_LENGTH]; char temp[MAX_WORD_LENGTH]; int i, j; // 从键盘输入单词 printf("请输入 %d 个单词,每个单词长度不得超过 %d 个字符:\n", MAX_WORDS, MAX_WORD_LENGTH - 1); for (i = 0; i < MAX_WORDS; i++) { scanf("%s", words[i]); } // 对单词进行排序 for (i = 0; i < MAX_WORDS - 1; i++) { for (j = i + 1; j < MAX_WORDS; j++) { if (strcmp(words[i], words[j]) > 0) { strcpy(temp, words[i]); strcpy(words[i], words[j]); strcpy(words[j], temp); } } } // 输出排序后的单词 printf("排序后的单词为:\n"); for (i = 0; i < MAX_WORDS; i++) { printf("%s\n", words[i]); } return 0; } ``` 该程序使用了一个二维字符数组 `words` 来存储输入的单词,其中 `MAX_WORDS` 定义了单词的最大数量,`MAX_WORD_LENGTH` 定义了单词的最大长度(包括结尾的空字符)。 程序首先从键盘输入单词并存储到 `words` 数组中,然后使用冒泡排序对单词进行排序,最后输出排序后的单词。注意,在比较单词大小时,使用了 `strcmp()` 函数,该函数可以比较两个字符串的大小,如果第一个字符串小于第二个字符串,则返回一个负数;如果两个字符串相等,则返回0;如果第一个字符串大于第二个字符串,则返回一个正数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾乃宇宙欠债王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值