此代码获取用户输入,然后使用 256% 长度的字符串。如果结果为 3 且输入为 abc,则输出为 bcd。这很好用。但是,如果输入是例如“嘿,怎么办”,长度是 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'
。但是,您不能确定是否存在 '\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
关于c - 空格不应计入字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53635000/