Функция, увеличение строки s1 на строку s2 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не могу понять, почему не происходит нормального копирования. Укажите на ошибку пожалуйста. Вот код:
#include <stdio.h>
#include <locale.h>
// подсчёт количества символов в строке
int strlenn(char* string);
 
//увеличения строки s1 на s2
void strrcat( char *s1, char *s2);

int main()
{
    char s[] = "При", s1[] = "вет";
    strrcat(s, s1);
    puts(s1);
    printf("%d", strlenn("abcdef"));
    return 0;
}

void strrcat( char *s1, char *s2)
{
    int len = 0;// начальная длина
    while( *s1 ) s1++;// пока разыменованное значение не равно нулю выполняется оператор передвижения указателя
    if(!(len)) len = strlenn(s2);// если лен - ложь, присваиваем лен количество элементов строки s2
        while(len && *s2)// пока истинны выражения
        {
            *s1++ = *s2++;//разыменовываем, присваивам посимвольно и передвигаем указатель
            len--;
        }
            *s1 = '\0';// символ конца строки
}
 
int strlenn(char* string)// аргумент для функции. указатель string, указывающуй на тип данных char, после ввода значения мы получаем адрес на начало массива
{
    char *s=string;// присваиваем указателю s адрес указателя string, s тоже указывает на начало строки
    while(*s++ && *s != '\0');// разыменовываем поэлементно и сдвигаем указатель, пока не достигнем нуля-терминатора
    int count=s-string;// разность адресов указателей. первый указатель находится на конце строки, второй на начале.
    return(count);
}
Этот момент:
void strrcat( char *s1, char *s2)
{
    int len = 0;// начальная длина
    while( *s1 ) s1++;// пока разыменованное значение не равно нулю выполняется оператор передвижения указателя
    if(!(len)) len = strlenn(s2);// если лен - ложь, присваиваем лен количество элементов строки s2
        while(len && *s2)// пока истинны выражения
        {
            *s1++ = *s2++;//разыменовываем, присваивам посимвольно и передвигаем указатель
            len--;
        }
            *s1 = '\0';// символ конца строки
}

Решение задачи: «Функция, увеличение строки s1 на строку s2»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <malloc.h>
// подсчёт количества символов в строке
int strlenn(char* string);
 
//увеличения строки s1 на s2
void strrcat( char *s1, char *s2);
 
int main()
{
    char s[20] = "При", s1[20] = "вет";
    strrcat(s, s1);
    printf("%d s=%s\n", strlenn(s), s);
    return 0;
}
 
void strrcat( char *s1, char *s2)
{
    while( *s1 ) s1++;
    while(*s2)
    {
        *s1++ = *s2++;
    }
    *s1 = '\0';// символ конца строки
}
 
int strlenn(char* s)
{
    int count = 0;
    while(*s++) count++;
    return(count);
}

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

  1. Подключение необходимых библиотек для работы со строками в коде
  2. Определение двух функций: strlenn(вычисление длины строки) и strrcat(увеличение строки s1 на s2)
  3. Создание двух массивов символов s и s1, присваивание им значений Привет и вет соответственно
  4. Вызов функции strrcat(s, s1) для увеличения строки s на s1
  5. Вывод на экран длины полученной строки и её значения с помощью функции printf
  6. Выход из программы с результатом выполнения задачи
  7. В функции strrcat происходит поиск конца строки s1 и добавление символов из строки s2 в конец строки s1
  8. В функции strlenn происходит подсчёт количества символов в строке s с помощью счётчика count и цикла while
  9. Возвращение значения длины строки из функции strlenn в main с помощью оператора return

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


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

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

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