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