C语言如何实现字符串单词个数统计

沿途有光
沿途有光
发布时间:2026-10-15 | 4人浏览过
原创

本文介绍使用C语言统计一行字符串中单词个数的方法。核心思路是通过空格判断单词边界:当检测到非空格字符且前一个字符为空格时,计数器加1。文章详细解析了flag标志位的用法、N-S流程图、完整源代码及运行结果示例,适合C语言初学者理解字符遍历与状态判断。

问题分析

在C语言中处理文本数据时,经常需要统计字符串内的单词数量。所谓“单词”,通常指由空格分隔的连续字符序列。题目要求输入一行包含空格的字符串,程序需准确识别并输出其中的单词总数。

输入样例:

I want to be a postgraduate.

输出样例:

There are 6 words in this line.

算法设计

统计单词数量的关键在于识别“新单词”的开始。一个简单的策略是利用空格作为分隔符,但需注意连续空格和行首空格的情况。

  1. 状态标记(flag):引入一个变量 flag 记录当前字符前的字符状态。
    • flag = 0:表示前一个字符是空格(或者位于字符串开头,视作遇到空格后的开始)。
    • flag = 1:表示前一个字符是非空格。
  2. 遍历逻辑:逐个读取字符串中的字符 c:
    • 如果 c 是空格:更新 flag = 0,意味着接下来的非空格字符将是新单词的开始。
    • 如果 c 不是空格:
      • 若此时 flag == 0:说明刚从前一个空格或非初始状态进入到了新单词的第一个字符,单词数 count 加1,同时置 flag = 1。
      • 若此时 flag == 1:说明仍在上一个单词内部,不执行任何操作。

这种方法的本质是统计“从空格变为非空格”的切换次数。初始化时 flag=0,确保第一个非空格字符能被正确计数为第一个单词。

N-S图示意:

C语言代码实现

以下是完整的C语言源代码。请注意,为了获取整行输入(包含空格),这里使用了 gets 函数(在现代标准中建议优先使用 fgets 以避免缓冲区溢出风险,但此处沿用原题解法以保持一致性)。

/*
 * C语言实现统计一行字符串的单词个数
 */
#include <stdio.h>
#include <string.h>

int main(void)
{
	char string[81]; // 定义字符数组存储输入字符串,最大长度80加上结束符\0
	int i, count = 0, flag = 0; // count记录单词数,flag记录前一字符状态
	char c;

	// 读取用户输入的一行字符串
	// 注意:实际工程中建议使用 fgets(string, sizeof(string), stdin);
	gets(string);

	// 遍历字符串直到遇到结束符 '\0'
	for(i=0; (c = string[i]) != '\0'; i++)
	{
		if(c == ' ') {
			// 当前字符是空格,标记前一个是空格(或当前也是空格)
			flag = 0;
		} else if(flag == 0) {
			// 当前字符非空格,且前一个字符是空格
			// 这意味着遇到了一个新单词的开始
			flag = 1;    // 更新状态:当前字符后跟着的是非空格
			count++;     // 单词计数器加1
		}
	}

	printf("There are %d words in this line.\n", count);
	return 0;
}

关键逻辑解析

  • 循环入口:初始化时 i=0,第一个字符被赋给 c。假设输入第一个字符是字母(如 'I'),它不是空格,进入 else if(flag == 0) 分支,因为初始 flag=0,所以 count 变为1。这符合直觉:行首的非空格字符即为第一个单词。
  • 连续空格处理:如果遇到多个空格,c==' ' 持续将 flag 设为0,只有当再次遇到非空格字符时,才会触发 count++,从而忽略多余的空格间隔。

测试结果

编译并运行上述代码,输入样例字符串:

I want to be a postgraduate.

程序输出如下:

There are 6 words in this line.

运行截图参考:

总结

通过维护一个状态标志位 flag,我们可以高效地检测字符串中文本段落的转换点。这种方法避免了复杂的状态机结构,代码简洁且逻辑清晰,是解决基础文本统计问题的经典范式。以上就是C语言实现统计一行字符串的单词个数的详细内容,更多关于C语言字符串处理的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表