c语言编写一个程序,在一维数组里输入一句英文,统计该句子里出现的单词个数?

3个月前 (03-07 22:00)阅读3回复0
东乐
东乐
  • 管理员
  • 注册排名3
  • 经验值649170
  • 级别管理员
  • 主题129834
  • 回复0
楼主

在C语言中,编写一个程序来统计一维数组中英文句子中的单词数量,需要考虑到单词之间的空格、句末的标点符号以及段落前的空格,以下是一个简化的实现思路和代码示例:

思路分析

1、遍历整个数组,检查每个字符。

2、遇到非空格字符时,开始计数并记录一个单词的开始。

3、遇到空格时,检查前一个非空格字符是否为单词的结束(即后面紧跟非字母或数字字符或句末)。

4、减去段落前的空格计数(如果存在)。

5、最终得到的计数即为单词数量。

示例代码

#include <stdio.h>
#include <string.h>
#include <ctype.h> // 用于isalpha和isdigit函数
int countWords(char *sentence) {
    int wordCount = 0; // 单词计数器
    int inWord = 0; // 标记是否在单词内(1为是,0为否)
    int paragraphStart = 0; // 标记段落开始(1为是,0为否)
    int i = 0; // 遍历数组的索引
    while (sentence[i] != '\0') { // 遍历直到字符串结束
        if (isspace(sentence[i])) { // 如果当前字符是空格
            if (inWord) { // 如果之前在单词内
                if (!paragraphStart) { // 如果不是段落开始(即不是段首的空格)
                    wordCount++; // 增加单词计数
                }
                inWord = 0; // 重置为不在单词内
            } else { // 如果之前不在单词内(即遇到段首空格)
                paragraphStart = 1; // 设置段落开始标志
            }
        } else if (isalpha(sentence[i]) || isdigit(sentence[i])) { // 如果当前字符是字母或数字
            inWord = 1; // 设置在单词内标志
        } else { // 其他情况(如标点符号)
            inWord = 0; // 重置为不在单词内,并忽略此类字符对单词计数的贡献
        }
        i++; // 移动到下一个字符
    }
    return wordCount; // 返回单词数量
}
int main() {
    char sentence[] = "Hello, world! This is a simple sentence."; // 示例句子
    printf("The number of words in the sentence is: %d\n", countWords(sentence)); // 输出单词数量
    return 0;
}

这段代码通过遍历字符串并利用isspaceisalphaisdigit函数来检测字符类型,从而统计出句子中的单词数量,注意,这里假设“段前空格”的逻辑已经通过paragraphStart变量处理,即只计算非段首的空格后的单词。

0
回帖

c语言编写一个程序,在一维数组里输入一句英文,统计该句子里出现的单词个数? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息