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