【问题标题】:How to add an multidigit int and a char, where the output will be int + char如何添加多位数 int 和 char,其中输出为 int + char
【发布时间】:2014-04-27 09:46:12
【问题描述】:

这是我目前所拥有的

头文件内容:

    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

【问题讨论】:

  • 使用std::stringstream
  • 为什么只需要打印的添加功能? Cout 已经可以为所欲为。请展示更多用例。

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


【解决方案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();
}

【讨论】:

  • 你在sprintf("%d+%c", A, B);中缺少第一个参数
  • 另外,为什么要在 C++ 中使用 sprintf? :O
  • @GrijeshChauhan 现在已修复。谢谢!
  • @LaszloPapp 我更喜欢“便携”而不是“古老”。
  • 好的,这是你的问题。现在还有一个更现代的答案(包括兼容性),读者不会受到影响,但总的来说,他们会受到影响。
【解决方案2】:

您实际上是在滥用 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

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 2016-03-07
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2020-11-03
    相关资源
    最近更新 更多