Написать функцию для подсчета символов в строке - 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;
}

Объяснение кода листинга программы

  1. Подключение стандартной библиотеки, необходимой для работы с строками.
  2. Определение функции strlen, которая принимает указатель на строку и возвращает её длину в единицах памяти.
  3. В функции strlen инициализируется указатель p значением s, затем выполняется цикл по всем символам строки до тех пор, пока не встретится нулевой символ. Возвращаемое значение функции — это разность между p и s.
  4. Определение функции getString, которая принимает указатель на буфер для хранения строки и максимальное количество символов, которые могут быть помещены в буфер. В функции происходит чтение символов из стандартного ввода до тех пор, пока не будет встречен символ новой строки или не будет достигнут предел количества символов. Если буфер пуст или указатель на буфер равен NULL, то функция возвращает NULL.
  5. В функции main создаётся пустая строка, а также цикл, который продолжается до тех пор, пока пользователь не введёт пустую строку. Внутри цикла выводится приглашение для ввода строки, затем вызывается функция getString, передавая ей указатель на строку и максимальное количество символов. Если строка пуста, то цикл прерывается. Если в строке есть символы, то выводится её длина, рассчитанная функцией strlen.
  6. В конце программы возвращается 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы