这是我到目前为止所拥有的
头文件读取:
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
答案 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;
}
请参阅下面的完整测试代码。
#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版本:
#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