Помогите с таким заданием: мы получаем две строки(символьных массива), и передаём их в функцию для конкатенации(это я сделал только как-то костыльно мне кажется), но нужно ещё сделать так что бы когда мы передаём в функцию число третьим параметром, строки объединялись до этого числа... например: 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);
}
Вывод строк еще не является конкентацией строк. В стандартной библиотеке есть функции для работы со строками. Для конкетации строк можно выполнить следующее:
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;
Попробуйте так:
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);
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости