【问题标题】: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));

标签: arrays c pointers strlen


【解决方案1】:
  1. 使用正确的尺寸类型
  2. *(p + x) === p[x] - 其中p 是指针,x 具有整数类型。您的两个功能完全相同。
  3. 使用具有某些含义的名称string_array 信息量不大,并且绝对不表示它返回的字符串长度不包含空格。
  4. 不要使用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 的可憎性相冲突...
猜你喜欢
  • 2021-10-08
  • 2020-02-05
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
相关资源
最近更新 更多