c - 空格不应计入字符串长度
问题描述
此代码获取用户输入,然后使用 256% 长度的字符串。如果结果为 3 且输入为 abc,则输出为 bcd。这工作正常。但是,如果输入例如“hey whatsup”,则长度为 11,应该为 10,因为长度不应包含空格。
我如何对这段代码进行编程,使其不计入长度空间?
甚至可以在使用 fgets 时实现它吗?
先感谢您。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char array[20];
int length = 0;
int i;
int key = 256;
printf("input: ");
fgets(array, 20, stdin);
length = strlen(array) - 1;
key = key % length;
if (key > 0) {
for (i = 0; i < length; i++) {
if (array[i] == ' ') {
printf("%c", array[i]);
continue;
}
array[i] = array[i] + key;
printf("%c", array[i]);
}
}
return 0;
}
解决方案
1)如果你不想在key的计算中包含空格,你必须制作自己的函数来计算空格的数量。
2)代码length = strlen(array) - 1;
似乎“照顾”'\n'
了字符串末尾的 a 。但是,您不能确定是否存在'\n'
. 你需要先检查一下。
3) 这样做key % 0
是“坏的”,所以也要检查一下
代码可能类似于:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cnt_spaces(char* arr)
{
int res = 0;
while(*arr)
{
if (*arr == ' ')
{
++res;
}
++arr;
}
return res;
}
int main() {
char array[20];
int length = 0;
int i;
int key = 256;
printf("input: ");
fgets(array, 20, stdin);
length = strlen(array);
if (strlen(array) == 0) return 0; // or add error handling
// Remove \n if present
if (array[length-1] == '\n')
{
array[length-1] = '\0';
--length;
}
printf("len = %d\n", length);
int spaces = cnt_spaces(array);
printf("spaces = %d\n", spaces);
if (length == spaces) return 0; // or add error handling
key = key % (length - spaces);
printf("key = %d\n", key);
if (key > 0) {
for (i = 0; i < length; i++) {
if (array[i] != ' ') {
array[i] = array[i] + key;
}
printf("%c", array[i]);
}
}
return 0;
}
例子:
input: a b c
len = 5
spaces = 2
key = 1
b c d
推荐阅读
- postgresql - PostgreSQL 11 - 尝试使用时间戳进行分区时出错
- c# - 怎样才能找到2000年以后写的最高价的书?
- c# - 带有 SimpleInjector 实例注册错误的 Asp.NET Core
- python - 如何矢量化熊猫操作
- html - 使无序列表可滚动
- apache-kafka - Kafka 偏移管理和与数据库同步
- c# - 尝试使用 c# ado,net 向 sql server 数据库插入行
- webdynpro - 以更改模式启动特定 PM 订单的 MT_ORDER_APP07 应用程序?
- javascript - 滚动到使用 cypress 虚拟化的反应
- javascript - React ref current 在设置它的组件外部为 null