1

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

头文件内容如下:

    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

4

2 回答 2

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();
}
于 2014-04-27T09:51:03.563 回答
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;
}

请参阅下面的完整测试代码。

主文件

#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
于 2014-04-27T09:51:11.943 回答