C语言计算字符串中单词数量

4星 · 超过85%的资源 需积分: 43 12 下载量 100 浏览量 更新于2024-09-21 收藏 2KB TXT 举报
"这篇文章主要介绍了如何使用C语言计算一个输入字符串中的单词数量。提供了三种不同的实现方法,分别展示了不同思路和技巧。" 在C语言中,判断字符串中的单词个数是一项基本任务,它涉及到字符串处理和字符判断。下面将详细解释标题和描述中涉及的知识点,并展示给定文件中的三个不同实现。 1. 第一种方法: 这个方法利用了`fgets()`函数从标准输入读取一行字符串,并使用`isalpha()`函数检查每个字符是否为字母。如果当前字符是字母且下一个字符不是字母(即单词边界),则计数器`num`加一。这种方法简单直观,但需要注意的是,`fgets()`会保留末尾的换行符,而`isalpha()`和`isalnum()`等函数在处理时通常会忽略大小写。 ```c #include<stdio.h> #include<ctype.h> void main() { char string[100]; int i, num = 0; fgets(string, sizeof(string), stdin); for (i = 0; string[i] != '\0'; i++) { if (isalpha(string[i]) && (!isalpha(string[i + 1]))) { num++; } } printf("There are %d words in the line.\n", num); } ``` 2. 第二种方法: 在这个版本中,作者使用了一个自定义函数`Find()`来计算单词数量。这个函数通过遍历整个字符串并检测特定条件来确定单词边界。这里使用了条件表达式来检查字符是否在字母范围内,并判断相邻字符的关系。`Find()`函数接收一个字符串和它的长度作为参数,返回单词计数。 ```c #include<stdio.h> #include<string.h> int Find(char a[100], size_t i) { int num = 0; size_t index = 0; for (index = 0; index != i; ++index) { if (('a' <= a[index] && 'z' >= a[index]) || ('A' <= a[index] && 'Z' >= a[index])) { if (('A' > a[index + 1] || ('Z' < a[index + 1] && a[index + 1] < 'a') || a[index + 1] > 'z')) { ++num; } } } return num; } int main() { char a[100] = {0}; scanf("%[^\n]", a); printf("%d\n", Find(a, strlen(a))); return 0; } ``` 3. 第三种方法: 这个实现引入了更多的库函数,如`fopen()`和`fclose()`用于文件操作,以及`fclose()`用于关闭文件。这个程序读取名为"string.txt"的文件中的内容,然后计算其中的单词数量。这种方法适用于处理文件中的文本,而不是标准输入。 ```c #include<stdio.h> #include<ctype.h> #include<string.h> int main() { char s[100]; int length = 0; int i = 0; int count = 0; FILE* fp; if ((fp = fopen("E:\\string.txt", "rt")) == NULL) // 打开文件失败 return -1; while (fgets(s, sizeof(s), fp)) { length = strlen(s); for (i = 0; i < length; i++) { if (isalpha(s[i]) && (!isalpha(s[i + 1]))) { count++; } } } fclose(fp); printf("There are %d words in the file.\n", count); return 0; } ``` 以上三种方法都可以有效地计算字符串或文件中的单词个数,但根据实际需求,可能需要选择更合适的方法。例如,第一种方法适用于简单的命令行交互,第二种方法适合在特定条件下查找单词,第三种方法则用于处理文件输入。在实际编程中,我们还应考虑错误处理、内存管理和效率优化等方面的问题。