Пробелы не должны учитываться до длины строки - PullRequest
0 голосов
/ 05 декабря 2018

Этот код получает пользовательский ввод, тогда используется длина строки 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 Ответ

0 голосов
/ 05 декабря 2018

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
...