此代码获取用户输入,然后使用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;
}
答案 0 :(得分:2)
1)如果不想在键的计算中包括空格,则必须使用自己的函数来计算空格数。
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