Пишем strcat в С++

Хотите знать как происходит добавление одной строки в конец другой? Как это можно сделать без strcat ? Я захотел.
Всё довольно просто! Всё что вам необходимо знать, чтобы понять это - указатели с++.
Вот текст программы:

#include <iostream>
#include <cstring>
using namespace std;

/* объявляем функцию */
void mystrcat(char *s1,char *s2,int len=0);

int main() {
    /* задаём две строки */
    char str1[80] = "Это тест.";
    char str2[80] = "0123456789";

    mystrcat(str1, str2, 5); // Присоединяем только 5 символов.
    cout << str1 << '\n';

    strcpy(str1, "Это тест."); // Восстанавливаем str1.
    mystrcat(str1, str2); // Присоединяем всю строку

    cout << str1 <<    '\n';
    return 0;
}

void mystrcat (char *s1 , char *s2,int len){

while(*s1) s1++;  // находим конец строки s1

    if(len == 0) len= strlen(s2);

    while(*s2 && len) {
        *s1 = *s2; // Копируем символы.
        s1++;
        s2++;
        len--;
    }
    *s1 = '\0'; // Завершаем строку s1 нулевым символом.
}

Заметте, что мы подключили библиотеку cstring только для того, чтобы не писать реализацию функции strlen(), это уже тема другой статьи.
Обратите внимание, что функция mystrcat присоеденяет len символов новой строки, но если этот параметр не указан, присоеденяется вся строка целиком.
Как это работает? По умолчанию указатель s1 содержит ссылку на первый элемент массива str. Мы проходя в цикле все элементы находим его конец и устанавливаем ссылку на него (добавлять ведь надо в конец). После чего делается проверка на "заданность" длины копируемой строки. И пока существует соответствующий элемент массива str и оставшаяся для копирования длина строки не нулевая, копируем символы при помощи указателей из одной строки в другую. При каждом проходе необходимо передвигать указатели на следующий элемент массива, а оставшуюся длину уменьшать. В конце необходимо добавить символ конца строки - '\0'.

Вывод программы примерно таков:

Это тест.01234
Это тест.0123456789

Всё отлично сработало ;)

ps по такому принципу построены многие функции! теперь вы знаете как всё это делается на низком уровне)

Просмотров:   1501

Комментарии

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Введи эти символы. Ато роботы одолели!