用C语言写一段代码,统计一个字符串中的单词个数,字符串中可能出现数字、所有格、标点符号,数字不计入单词个数,所有格与其连接的单词共同算作一个单词
时间: 2024-02-13 15:04:34 浏览: 73
统计单词个数&&将字符串中连续出现的数字放进一维数组
4星 · 用户满意度95%
好的,可以使用以下 C 语言代码来实现:
```c
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
bool is_word_char(char c) {
// 判断一个字符是否是单词字符
return isalpha(c) || (c == '\'');
}
int count_words(char *s) {
int count = 0;
char *p = s;
bool in_word = false; // 标记是否在单词中
while (*p != '\0') {
if (isdigit(*p)) {
// 如果当前字符是数字,则跳过
p++;
} else if (is_word_char(*p)) {
// 如果当前字符是单词字符,则进入单词
if (!in_word) {
in_word = true;
count++;
}
p++;
} else {
// 如果当前字符是分隔符,则退出单词
in_word = false;
if (*p == '\'') {
// 如果当前字符是所有格符号,则将其与前面的单词合并
if (p > s && *(p-1) == 's') {
count--;
}
}
p++;
}
}
return count;
}
int main() {
char s[100];
printf("Please enter a string: ");
fgets(s, sizeof(s), stdin);
printf("The number of words in the string is: %d\n", count_words(s));
return 0;
}
```
其中,`isalpha()` 函数用于判断字符是否是字母,`isdigit()` 函数用于判断字符是否是数字,`is_word_char()` 函数用于判断一个字符是否是单词字符,`in_word` 变量用于标记是否在单词中,`if` 语句用于判断单词边界,`if (*p == '\'')` 语句用于判断所有格符号并合并单词。注意,`fgets()` 函数可以读取带空格的字符串,且在字符串末尾自动添加一个空字符 `\0`。
阅读全文