Как добавить multidigit int и char, где на выходе будет int + char

это то, что я до сих пор

Заголовочный файл читает:

    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

1

Решение

Во-первых, давайте исправим ваш существующий код:

Ваш код предполагает, что 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();
}
1

Другие решения

Вы по сути неправильно используете 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;
}

Смотрите мой полный тестовый код ниже.

main.cpp

#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, если вам это нужно для совместимости:

main.cpp

#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
1

По вопросам рекламы [email protected]