Написать функцию для подсчета символов в строке - C (СИ)
Формулировка задачи:
Требуется написать функцию для подсчета символов в строке. Я вроде бы написал.. Но Функция вычисляет правильно при первом вызове, при последующих для первого слова в строке выводит количество символов больше на 1. Где ошибка?
#include <stdio.h> #include <conio.h> int i, j; #define MAX_STRINGS 64 #define MAX_LENGTH 8 void enter_strings(char str[MAX_STRINGS][MAX_LENGTH]); int length_strings(char str[MAX_LENGTH]); int main() { char string1[MAX_STRINGS][MAX_LENGTH], string2[MAX_STRINGS][MAX_LENGTH], string3[MAX_STRINGS][MAX_LENGTH]; enter_strings(string1); enter_strings(string2); enter_strings(string3); printf("%d", length_strings(string2[0])); getch(); return 0; } void enter_strings(char str[MAX_STRINGS][MAX_LENGTH]) { char m; m = 'a'; printf ("\nInput strings: "); for (i = 0; m != '.'; i++) { scanf ("%c", &m); for (j = 0; m != '.' && m != ' '; j++) { str[i][j] = m; scanf ("%c", &m); } str[i][j]='\0'; } str[i][0]='\0'; } int length_strings(char str[MAX_LENGTH]) { int length = 0; for (i = 0; str[i] != '\0'; i++) length++; return length; }
Решение задачи: «Написать функцию для подсчета символов в строке»
textual
Листинг программы
#include <stdio.h> size_t strlen(const char *s){ const char *p; if ( !s ) return 0; for ( p = s; *p; ++p ) ; return p - s; } char *getString(char *buf, size_t len){ int c; char *p; if ( !buf || !len ) return NULL; p = buf; while ( --len && ( c = getchar() ) != '\n' && c != EOF ) *p++ = c; *p = '\0'; return buf; } #define STR_MAX 256 int main(void){ char str[STR_MAX]; while ( 1 ){ printf("String: "); getString(str, STR_MAX); if ( !*str ) break; printf("Length: %d\n", strlen(str)); } return 0; }
Объяснение кода листинга программы
- Подключение стандартной библиотеки, необходимой для работы с строками.
- Определение функции
strlen
, которая принимает указатель на строку и возвращает её длину в единицах памяти. - В функции
strlen
инициализируется указательp
значениемs
, затем выполняется цикл по всем символам строки до тех пор, пока не встретится нулевой символ. Возвращаемое значение функции — это разность междуp
иs
. - Определение функции
getString
, которая принимает указатель на буфер для хранения строки и максимальное количество символов, которые могут быть помещены в буфер. В функции происходит чтение символов из стандартного ввода до тех пор, пока не будет встречен символ новой строки или не будет достигнут предел количества символов. Если буфер пуст или указатель на буфер равенNULL
, то функция возвращаетNULL
. - В функции
main
создаётся пустая строка, а также цикл, который продолжается до тех пор, пока пользователь не введёт пустую строку. Внутри цикла выводится приглашение для ввода строки, затем вызывается функцияgetString
, передавая ей указатель на строку и максимальное количество символов. Если строка пуста, то цикл прерывается. Если в строке есть символы, то выводится её длина, рассчитанная функциейstrlen
. - В конце программы возвращается
0
, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д