c语言编写一个程序,在一维数组里输入一句英文,统计该句子里出现的单词个数?
在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;
}这段代码通过遍历字符串并利用isspace、isalpha和isdigit函数来检测字符类型,从而统计出句子中的单词数量,注意,这里假设“段前空格”的逻辑已经通过paragraphStart变量处理,即只计算非段首的空格后的单词。
0
