You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言新手求助:为何字符串遍历循环仍统计空格?

为什么你的循环会统计字符串中的空格?

嘿,刚入门编程遇到这种小疑惑太正常啦,我来帮你理清楚问题出在哪~

首先先看你写的代码:

int main(void) { 
    string t = get_string("Copy & Paste Text\n"); 
    int lettercount = 0; 
    for (int i = 0; t[i] != '\0'; i++) { 
        lettercount++; 
    } 
    printf("%i", lettercount); 
    printf("\n"); 
}

问题根源:你的循环没有过滤空格

这段代码的逻辑很直接:从字符串的第一个字符开始遍历,只要当前字符不是字符串结束符'\0',就给计数器加1。而空格(ASCII值是32)是一个完全合法的字符,它不等于'\0',所以每遇到一个空格,lettercount都会+1——这就是为什么空格被统计进去了。

你原本想要的是“只统计非空格、非'\0'的字符”,那只需要在循环里加一个判断条件,跳过空格就行。

修改方案1:仅跳过空格

把循环里的计数逻辑改成只有当当前字符不是空格时才递增计数器:

int main(void) { 
    string t = get_string("Copy & Paste Text\n"); 
    int lettercount = 0; 
    for (int i = 0; t[i] != '\0'; i++) { 
        // 只有当前字符不是空格时,才计数
        if (t[i] != ' ') { 
            lettercount++; 
        } 
    } 
    printf("%i", lettercount); 
    printf("\n"); 
}

修改方案2:跳过所有空白字符(进阶版)

如果你还想跳过其他空白字符(比如制表符\t、换行符\n),可以用C标准库的isspace()函数,不过记得要包含<ctype.h>头文件:

#include <ctype.h> // 必须包含这个头文件才能使用isspace函数

int main(void) { 
    string t = get_string("Copy & Paste Text\n"); 
    int lettercount = 0; 
    for (int i = 0; t[i] != '\0'; i++) { 
        // 如果当前字符不是空白字符,就计数
        if (!isspace(t[i])) { 
            lettercount++; 
        } 
    } 
    printf("%i", lettercount); 
    printf("\n"); 
}

这样修改后,就能实现你最初想要的“只统计非空白、非结束符的字符”的效果啦~

内容的提问来源于stack exchange,提问作者learning_alot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:52:35