如何添加一个multidigit int和一个char,其中输出将是int + char

时间:2014-04-27 09:46:12

标签: c++ visual-studio-2010 char int itoa

这是我到目前为止所拥有的

头文件读取:

    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

2 个答案:

答案 0 :(得分: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。 C ++为您提供了一个stringstream类,让您不必担心预分配:

string MyAdd(int A, char B) {
    stringstream ss;
    ss << A << "+" << B;
    return ss.str();
}

答案 1 :(得分:1)

你本质上是在滥用C ++。您可以为所有要执行的操作提供高级功能。

如果您希望可移植以使用旧编译器,我会使用sstringstream进行转换,否则请参阅下文。

string MyAdd(int A, char B)
{
    stringstream ss;
    ss << A << B;
    return ss.str();
}

话虽如此,我个人真的在这里使用to_string来使用C ++ 11,所以我会写这样的东西:

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

=============================================== =========================

在这里,如果您需要兼容性,可以找到我的pre-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