Конкатенация строк на С++

144
19 сентября 2021, 18:30

Помогите с таким заданием: мы получаем две строки(символьных массива), и передаём их в функцию для конкатенации(это я сделал только как-то костыльно мне кажется), но нужно ещё сделать так что бы когда мы передаём в функцию число третьим параметром, строки объединялись до этого числа... например: str1 = Hello, str2 = World, length = 3, в итоге без указания длинны функция должна вывести Hello World, иначе Hello Wor, вот что сделал: (у меня в случае если длину то вместо объединения оно перезаписывает первую строку второй, хотя в прошлом приложении на С это вроде работало, может накосячил где..) P.S. и наверное лучше это всё сделать с использованием указателей, но я вообще запутаюсь, пока не знаю как это нормально сделать :D

const int size_of_str = 100;
void fill_str(char str[]);
void str_conc(char str1[], char str2[], int length = 0);
int main()
{
    char str1[size_of_str];
    char str2[size_of_str];
    cout << "Input first str: ";
    fill_str(str1);
    cout << "input second str: ";
    fill_str(str2);
    cout << "Conc without length" << endl;
    str_conc(str1, str2);
    cout << "Conc with length" << endl;
    str_conc(str1, str2, 3);
    system("pause");
    return 0;
}
void fill_str(char str[]) // заполнение массива.
{
    int inpt, i = 0;
    while (((inpt = getchar()) != '\n') && i < (size_of_str - 1))
    {
        str[i++] = inpt;
    }
    str[i] = 0;
}
void str_conc(char str1[], char str2[], int length)
{
    int i, j;
    if (length == 0)
    {
        cout << str1 << str2 << endl;
    }
    else
    {
        for(j = 0; str1[i] = str2[j]; i++, j++);
        cout << str1 << endl;
    }
}

UPD:

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

const int size_of_str = 100;
void fill_str(char str[]);
void str_conc(char str1[], char str2[], int length = 0);
void str_conc(char *str1, char *str2, char *res, int len = 0);
int main()
{
    char str1[size_of_str];
    char str2[size_of_str];
    char result[size_of_str] = {0};
    cout << "Input first str: ";
    fill_str(str1);
    cout << "input second str: ";
    fill_str(str2);
    cout << "Conc without length" << endl;
    //str_conc(str1, str2);
    str_conc(str1, str2, result);
    cout << result << endl;
    cout << "Conc with length" << endl;
    //str_conc(str1, str2, 3);
    str_conc(str1, str2, result, 2);
    cout << result << endl;

    system("pause");
    return 0;
}
void fill_str(char str[]) // заполнение массива.
{
    int inpt, i = 0;
    while (((inpt = getchar()) != '\n') && i < (size_of_str - 1))
    {
        str[i++] = inpt;
    }
    str[i] = 0;
}
void str_conc(char *str1, char *str2, char *res, int len)
{
    int copy_len = (len == 0 ? strlen(str2) : len);
    strncpy(res, str1, strlen(str1));
    strncpy(res + strlen(str1), str2, copy_len);
}
Answer 1

Вывод строк еще не является конкентацией строк. В стандартной библиотеке есть функции для работы со строками. Для конкетации строк можно выполнить следующее:

void str_conc(char str1[], char str2[], int length)
{
    if (length == 0)
        strcat(str1, str2);
    else
        strncat(str1, str2, length);
}

После вызова функции, в строке str1 будет нужная вам строка. И это далеко не C++, а чистый С. В C++ все намного легче:

std::string str1, str2;
std::cin >> str1 >> str2;
str1 += str2;
Answer 2

Попробуйте так:

int main()
{
    char result[100]{0};
    str_conc("Hello", "World", result, 4);
    cout << result << endl;
    return 0;
}
// str1, str2 без изменений
// res - строка, в которую будет записан результат
// res обязан быть по длине больше или равен, чем str1 + str2 + 1
void str_conc(char *str1, char *str2, char *res, int len)
{
    int copy_len = (len == 0 ? strlen(str2) : len);
    strncpy(res, str1, strlen(str1));
    strncpy(res + strlen(str1), str2, copy_len);
}
READ ALSO
среда разработки NetBeans для с++ выдает ошибку error 2

среда разработки NetBeans для с++ выдает ошибку error 2

установила NetBenas, все средства Cygwin(g++,make,gdb) установилакомпилирую код выдает ошибку Error2(в интернете пишут что это дважды определили main, хотя...

155
Генерировать машинный код на C++ [закрыт]

Генерировать машинный код на C++ [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

119
Есть ли движок на GLUT-е?

Есть ли движок на GLUT-е?

Видел программу звёздная система на GLUT написанная "процедурным" методом

106
Обработка некорректного пользовательского ввода

Обработка некорректного пользовательского ввода

Есть функция для консольного приложенияОна должна возвращать 's' или 'h', если таковые символы были введены

109