相关疑难解决方法(0)

在C++中将int转换为字符串的最简单方法

在C++中转换int为等效的最简单方法是什么?string我知道两种方法.有没有更简单的方法?

(1)

int a = 10;
char *intStr = itoa(a);
string str = string(intStr);
Run Code Online (Sandbox Code Playgroud)

(2)

int a = 10;
stringstream ss;
ss << a;
string str = ss.str();
Run Code Online (Sandbox Code Playgroud)

c++ string int type-conversion

1488
推荐指数
16
解决办法
273万
查看次数

像sprintf一样的std :: string格式

我必须格式化std::stringsprintf,并将其发送到文件流.我怎样才能做到这一点?

c++ string formatting stl

412
推荐指数
17
解决办法
77万
查看次数

将int转换为std :: string

将int转换为字符串的最短路径是什么,最好是内联的?使用stl和boost的答案将受到欢迎.

c++ string int

131
推荐指数
7
解决办法
22万
查看次数

C++性能挑战:整数到std :: string的转换

任何人都可以击败我的整数到std :: string代码的性能,链接如下?

已经有几个问题可以解释如何将整数转换为std::stringC++中的整数,例如这个,但是所提供的解决方案都没有效率.

以下是一些可用于竞争的常用方法的编译就绪代码:

流行的看法相反,boost::lexical_cast有自己的实现(白皮书)并且不使用stringstream和数字插入运算符.我真的希望看到它的性能比较,因为另一个问题表明它很悲惨.

我自己的贡献,在桌面计算机上具有竞争力,并演示了一种在嵌入式系统上全速运行的方法,与依赖整数模数的算法不同:

如果您想使用该代码,我将根据简化的BSD许可证提供(允许商业使用,需要归属).请问.

最后,该功能ltoa是非标准的,但可广泛使用.

  • ltoa版本,适用于拥有提供它的编译器的任何人(ideone没有):http://ideone.com/T5Wim

我很快就会发布我的性能测量结果.

算法规则

  • 提供将至少32位有符号和无符号整数转换为十进制的代码.
  • 产生输出作为std::string.
  • 没有与线程和信号不兼容的技巧(例如,静态缓冲区).
  • 您可以假设ASCII字符集.
  • 确保INT_MIN在绝对值无法表示的二进制补码机上测试代码.
  • 理想情况下,输出应为字符的字符与规范的C++版本使用相同的stringstream,http://ideone.com/jh3Sa,但任何事情,这显然是理解的,因为正确的号码也是OK.
  • :虽然你可以使用你想要进行比较的任何编译器和优化器选项(除了完全禁用),但代码还需要编译并在至少VC++ 2010和g ++下给出正确的结果.

希望讨论

除了更好的算法,我还想在几个不同的平台和编译器上获得一些基准测试(让我们使用MB/s吞吐量作为我们的标准测量单位).我相信我的算法代码(我知道sprintf基准测试需要一些快捷方式 - 现在已经修复)是标准的明确定义的行为,至少在ASCII假设下,但是如果你看到任何未定义的行为或输出的输出无效,请指出.

结论:

不同的算法对g ++和VC2010执行,可能是由于std::string每个算法的实现不同.VC2010显然在NRVO方面做得更好,摆脱了价值回报只对gcc有帮助.

发现代码的性能优于sprintf一个数量级. ostringstream落后50倍甚至更多.

挑战的胜利者是user434507,他在gcc上生成的代码运行速度是我自己的350%.由于SO社区的突发奇想,其他条目将被关闭.

目前(最终?)速度冠军是:

  • 对于gcc:user434507,速度比sprintf …

c++ string performance integer

118
推荐指数
6
解决办法
4万
查看次数

如何从int转换为char*?

我知道的唯一方法是:

#include <sstream>
#include <string.h>
using namespace std;

int main() {
  int number=33;
  stringstream strs;
  strs << number;
  string temp_str = strs.str();
  char* char_type = (char*) temp_str.c_str();
}
Run Code Online (Sandbox Code Playgroud)

但是有没有更少打字的方法?

c++ integer const-char

93
推荐指数
5
解决办法
31万
查看次数

c ++ integer-> std :: string转换.功能简单?

问题:我有一个整数; 这个整数需要转换为stl :: string类型.

在过去,我曾经stringstream做过转换,这有点麻烦.我知道C方式是做一个sprintf,但我宁愿做一个类型安全(呃)的C++方法.

有一个更好的方法吗?

这是我过去使用的字符串流方法:

std::string intToString(int i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}
Run Code Online (Sandbox Code Playgroud)

当然,这可以改写如下:

template<class T>
std::string t_to_string(T i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}
Run Code Online (Sandbox Code Playgroud)

但是,我认为这是一个相当"重量级"的实施.

Zan指出,调用非常好,但是:

std::string s = t_to_string(my_integer);
Run Code Online (Sandbox Code Playgroud)

无论如何,一个更好的方式将是......很好.

有关:

用于将整数转换为字符串C++的itoa()的替代方案?

c++ integer stdstring

76
推荐指数
3
解决办法
11万
查看次数

如何将C++字符串转换为int?

可能重复:
如何在C++中将字符串解析为int?

如何将C++字符串转换为int?

假设您希望字符串中包含实际数字(例如,"1","345","38944").

另外,让我们假设你没有提升,你真的想用C++方式来做,而不是狡猾的旧C方式.

c++ int parsing stdstring

46
推荐指数
2
解决办法
14万
查看次数

将数字转换为C++中具有指定长度的字符串

我有一些不同长度的数字(如1,999,76492,等等),我想将它们全部转换为具有共同长度的字符串(例如,如果长度为6,那么这些字符串将为:'000001' ,'000999','076492').

换句话说,我需要在数字中添加正确数量的前导零.

int n = 999;
string str = some_function(n,6);
//str = '000999'
Run Code Online (Sandbox Code Playgroud)

在C++中有这样的函数吗?

c++ integer stdstring

45
推荐指数
3
解决办法
5万
查看次数

比较3种现代c ++方法将积分值转换为字符串

我试图选择一种将积分转换为字符串标准方法,所以我接着通过测量3种方法的执行时间进行了一次小的性能评估

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <chrono>
#include <random>
#include <exception>
#include <type_traits>
#include <boost/lexical_cast.hpp>

using namespace std;

// 1. A way to easily measure elapsed time -------------------
template<typename TimeT = std::chrono::milliseconds>
struct measure
{
    template<typename F>
    static typename TimeT::rep execution(F const &func)
    {
        auto start = std::chrono::system_clock::now();
        func();
        auto duration = std::chrono::duration_cast< TimeT>(
            std::chrono::system_clock::now() - start);
        return duration.count();
    }
};
// -----------------------------------------------------------

// 2. Define the convertion functions …
Run Code Online (Sandbox Code Playgroud)

c++ boost stl c++11

23
推荐指数
1
解决办法
3300
查看次数

gcc错误:对'itoa'的未定义引用

如果我包含stdlib.h,那么也无法识别itoa().我的代码:

%{
#include "stdlib.h"
#include <stdio.h>
#include <math.h>
int yylex(void);
char p[10]="t",n1[10];
int n ='0';

%}
%union
{
char *dval;
}
%token ID
%left '+' '-'
%left '*' '/'
%nonassoc UMINUS
%type <dval> S
%type <dval> E
%%
S : ID '=' E {printf(" x = %sn",$$);}
;
E : ID {}
| E '+' E {n++;itoa(n,n1,10);printf(" %s = %s + %s ",p,$1,$3);strcpy($$,p);strcat($$,n1);}
| E '-' E {n++;itoa(n,n1,10);printf(" %s = %s – %s ",p,$1,$3);strcpy($$,p);strcat($$,n1);}
| E '*' E {n++;itoa(n,n1,10);printf(" %s …
Run Code Online (Sandbox Code Playgroud)

gcc itoa

8
推荐指数
2
解决办法
5万
查看次数