在不计算空格的情况下查找字符串的长度
Posted
技术标签:
【中文标题】在不计算空格的情况下查找字符串的长度【英文标题】:Find Length of string without counting spaces 【发布时间】:2022-01-15 01:45:05 【问题描述】:我正在制作查找用户输入的字符串长度的程序。一切正常,但程序也计算空间。那么,如何在不计算空格的情况下找到字符串的长度呢?
【问题讨论】:
添加if
以忽略空格。这是作业吗?
类似if (*c != ' ') count++;
?我相信你能做到。
isspace
在ctype.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 字符串? [复制]