Помогите с таким заданием: мы получаем две строки(символьных массива), и передаём их в функцию для конкатенации(это я сделал только как-то костыльно мне кажется), но нужно ещё сделать так что бы когда мы передаём в функцию число третьим параметром, строки объединялись до этого числа... например: 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);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
установила NetBenas, все средства Cygwin(g++,make,gdb) установилакомпилирую код выдает ошибку Error2(в интернете пишут что это дважды определили main, хотя...
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме
Видел программу звёздная система на GLUT написанная "процедурным" методом
Есть функция для консольного приложенияОна должна возвращать 's' или 'h', если таковые символы были введены