在不计算空格的情况下查找字符串的长度

Posted

技术标签:

【中文标题】在不计算空格的情况下查找字符串的长度【英文标题】:Find Length of string without counting spaces 【发布时间】:2022-01-15 01:45:05 【问题描述】:

我正在制作查找用户输入的字符串长度的程序。一切正常,但程序也计算空间。那么,如何在不计算空格的情况下找到字符串的长度呢?

【问题讨论】:

添加if 以忽略空格。这是作业吗? 类似if (*c != ' ') count++;?我相信你能做到。 isspacectype.h 标头中捕获任何 个空格,包括制表符、回车符、换行符等。 顺便说一句,if(...) ++count; 的替代品是 count += *c != ' '; @Aconcagua 如果你想让代码更难阅读,你可以` for(; *c; c++, length += *c != ' ');` 或while(length += *c != ' ', *(++c)); 【参考方案1】:
    使用正确的尺寸类型 *(p + x) === p[x] - 其中p 是指针,x 具有整数类型。您的两个功能完全相同。 使用具有某些含义的名称string_array 信息量不大,并且绝对不表示它返回的字符串长度不包含空格。 不要使用gets 函数,因为它非常危险。使用限制放置在字符串中的字符数的函数。例如fgets
size_t strlenNoSpaces(const char * restrict c)

    size_t length = 0;
    for(; *c; c++)
    
        if(*c != ' ') length++;
    
    return length;


int main()

    char string[30];
    size_t length, i;

    printf("Enter string: ");
    fgets(string, 29, stdin);

    length = strlen(string);
    printf("\nLength of string using strlen.\n");
    printf("Length of string %zu.\n", length);

    length = strlenNoSpaces(string);
    printf("\nLength of string not counting the spaces.\n");
    printf("Length of string %zu.\n", length);

    return 0;

【讨论】:

@sefisko:请注意,fgets 要求限制比可用数组长度小一,因为限制是指实际读取的字符数,但输入之后仍然以空值结尾(因此 30 29)。 这里sizeof(string) - 1 也比29 好。而且我个人避免在 C 代码中调用变量 string - 这是许多其他语言中的关键字。并想象一些可怜的菜鸟将此代码粘贴到一些 CS50 问题中 - 变量名称 string 本身与 CS50 对 typedef 的可憎性相冲突...

以上是关于在不计算空格的情况下查找字符串的长度的主要内容,如果未能解决你的问题,请参考以下文章

BASH:试图在不引入空格的情况下在另一行上继续一个字符串[重复]

如何在不引入意外空格的情况下在多行上编写 f 字符串? [复制]

如何在不折叠空格的情况下在 bash 脚本中拆分制表符分隔的字符串?

在不访问库的情况下将整数转换为字符串

如何使用方案编程语言查找字符串中的字符数?

在不使用向量的情况下,将字符串分割成C ++中的数组