Консультация № 168568
30.05.2009, 18:25
0.00 руб.
0 4 3
Здраствуйте, подскажите как обединить char* и int в одну строку, т.е. к примеру есть:
Код:

char* rez1 = "Rezultat: ";
int rez = 8

как получит такую строку: char* "Rezultat: 8"? т.е. просто обединить. Желательно кусок кода :)
Заранее спасибо.

Обсуждение

Неизвестный
30.05.2009, 20:17
общий
То, что Вы просите сделать не сложно только скажите зачем Вам это надо? Это довольно странная операция.
Неизвестный
30.05.2009, 20:26
общий
это ответ
Здравствуйте, Станислав.
ну например :
char test[255];
memset(test,0,sizeof(test));
char* rez1 = "Rezultat: ";
int rez = 8;
sprintf(test,"%s %d", rez1, rez);
в test будет то, что вы хотите
Неизвестный
30.05.2009, 21:48
общий
это ответ
Здравствуйте, Станислав.

#include <iostream.h>

void main()
{
char* rez1 = "Rezultat: ";
int rez = 8;
cout << rez1 << rez << endl;
}

Оператор cout является стандартным потоком вывода.
Поток – свойство, отражающее перемещение данных от источника к приемнику.
Стандартный поток вывода направлен на экран, а поток ввода направлен с клавиатуры.
Операция << -- это операция вставки в поток.
Она копирует содержимое переменной, стоящей справа от нее в поток, стоящий слева.
Неизвестный
30.05.2009, 23:22
общий
это ответ
Здравствуйте, Станислав.
Суть в том, что без дополнительных ухищрений, таких как дополнительное выделение памяти для результата или использования промежуточного буфера Вы не можете этого сделать. Это потому, что данная строка представляет собой фиксированное место в памяти с заранее(на этапе компиляции) определенным размером. Поэтому, чтоб собрать новую строку необходимо выделить место в памяти, учитывая размер числа, и скопировать туда данные.

Я могу предложить Вам несколько методов решения Вашей задачи.
1. Выделить место для результата с запасом на число.
Код:

#include <limits>
#include <iostream>
#include <cstring>

using namespace std;

#define RESULT_STR "Result : "

int main()
{
char str[sizeof(RESULT_STR)+numeric_limits<int>::digits10+1]=RESULT_STR;
int res=8;
itoa(res,str+sizeof(RESULT_STR)-1,10);
cout<<str<<endl;
system("PAUSE");
return 0;
}


2.Использовать возможности STL C++. Например тип данных class string вместо char*. Этот класс обладает несравненными преимуществами по сравнению с char*

Код:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
string str="Result : ";
int res=8;
ostringstream stream;
stream<<str<<res;
str=stream.str();
cout<<str<<endl;
system("PAUSE");
return 0;
}

Не правда ли, так лучше. Кроме того строковые классы легко поддерживают различные виды операций.
Так, например, выглядит конкатенация:
Код:

#include <iostream>
#include <string>

using namespace std;

int main()
{
string str="Result : ";
string res="8";
cout<<str+res<<endl;
system("PAUSE");
return 0;
}

Все приведенные примеры выдают один и тот же результат:
Код:

Result : 8
Форма ответа