Вычислить длину строки без использования функции strlen () - PullRequest
0 голосов
/ 06 октября 2018

Сомнение относительно очень простого C-кода.Я написал код для расчета длины строки без использования функции strlen.Код ниже работает правильно, если я ввожу строку без пробелов между ними.Но если я введу строку типа «Мое имя ---», показанная длина будет длиной слова перед первым пробелом, который в примере будет равен 2. Почему это?Разве пробел и нулевой символ не являются двумя разными символами?Пожалуйста, объясните мне, как я могу изменить код, чтобы возвращалась вся длина строки?

char s[1000];
int length = 0;
printf ("Enter string : ");
scanf ("%s", s);
for (int i = 0; s[i] != '\0'; i++)
  {
    length++;
  }
printf ("Length of given string : %d", length);

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

scanf считывает данные до "\ 0" или "\ 20".Так что используйте метод "fgets", который читает данные до "\ n" (следующая строка) с "stdin",

Пример программы:

#include <stdio.h>

int main() {

    char s[100];
    printf("Input String: ");
    fgets(s, sizeof(s), stdin);
    printf("\nLength of the string is = %d", printf("%s"), s);
    return 0;
}
0 голосов
/ 06 октября 2018

Это потому что scanf с %s читает, пока не найдет пробел.

из man scanf

Соответствует последовательности непробельные символы;следующий указатель должен быть указателем на массив символов, который достаточно длинный, чтобы содержать входную последовательность и завершающий нулевой байт ('\ 0'), который добавляется автоматически.Входная строка останавливается на пустом месте или на максимальной ширине поля, в зависимости от того, что произойдет раньше.

Если вы хотите прочитать до \n, включая пробел, вы можете сделать, как показано ниже.

scanf("%999[^\n]", s);

Или вы можете использовать fgets.

...