это то, что я до сих пор
Заголовочный файл читает:
string MyAdd(int A, char B)
{
char C[10];
itoa(A,C,10);
C[1] = '+';
C[2] = B;
C[3] = '\0';
return C;
}
Программа вызова:
cout << "\n\t\tThe sum of 1 and X is = " << MeLoad.MyAdd(1 ,'X' );
Где вывод:
The sum of 1 and X is = 1 + X
Но это будет работать только с однозначными числами
так что если я попытаюсь добавить 1000 + X, он все равно вернет 1 + X, и я понятия не имею, почему.
Может ли кто-нибудь указать мне правильное направление? любая помощь приветствуется, спасибо.
Использование VS 2010
Во-первых, давайте исправим ваш существующий код:
Ваш код предполагает, что itoa
вывод заканчивается на символ 1
, использование strlen
чтобы найти фактическую конечную позицию, а затем напишите в этой позиции, например так:
itoa(A,C,10);
int p = strlen(C);
C[p++] = '+';
C[p++] = B;
C[p] = '\0';
Далее, давайте рассмотрим альтернативу этому: вы могли бы использовать sprintf
чтобы поместить ваш код в одну строку, например так:
sprintf(C, "%d+%c", A, B);
Наконец, давайте сделаем ваш код C ++:
Ваш код выше может быть также на C, потому что он не использует возможности C ++. Оба подхода выше ограничены, потому что вы должны предварительно выделить буфер C
на некоторой максимальной мощности. С ++ дает вам stringstream
класс, который позволяет вам не беспокоиться о предварительном распределении:
string MyAdd(int A, char B) {
stringstream ss;
ss << A << "+" << B;
return ss.str();
}
Вы по сути неправильно используете C ++. У вас есть функциональность высокого уровня для всего, что вы пытаетесь сделать.
Если вы хотите быть переносимым для работы со старыми компиляторами, я бы использовал sstringstream
для преобразования, иначе см. ниже.
string MyAdd(int A, char B)
{
stringstream ss;
ss << A << B;
return ss.str();
}
Это, как говорится, я бы лично действительно использовать C ++ 11 здесь с to_string
так что я бы написал что-то вроде этого:
string MyAdd(int A, char B)
{
return to_string(A) + B;
}
Смотрите мой полный тестовый код ниже.
#include <string>
#include <iostream>
using namespace std;
string MyAdd(int A, char B)
{
return to_string(A) + B;
}
int main()
{
cout << MyAdd(0, 'A') << endl;
return 0;
}
g++ -std=c++11 main.cpp && ./a.out
0A
================================================== ======================
Здесь вы можете найти мою версию до c ++ 11, если вам это нужно для совместимости:
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
string MyAdd(int A, char B)
{
stringstream ss;
ss << A << B;
return ss.str();
}
int main()
{
cout << MyAdd(0, 'A') << endl;
return 0;
}
g++ main.cpp && ./a.out
0A