字符型数字转数字

freshow 2010-02-06 07:20:41
string csNum = "13858095875";
转成
DWORD dwNum = 13858095875;

要求:效率越高越好
...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
freshow 2010-02-07
  • 打赏
  • 举报
回复
string text = "123,234,456,567,678-789-890,901-1000";
string separators = ",";

size_t start = text.find_first_not_of(separators);
size_t end = 0;

int word_count = 0;
while (start != string::npos)
{
end = text.find_first_of(separators, start + 1);
if(end == string::npos)
{
end = text.length();
}

word_count++;
TRACE("\n[%d] Num:%s", word_count, (text.substr(start, end - start)).c_str());

start = text.find_first_not_of(separators, end + 1);
}
DontKissBossAss 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 baesky 的回复:]
引用楼主 freshow 的回复:
string csNum = "13858095875";
转成
DWORD dwNum = 13858095875;

要求:效率越高越好


用内联汇编分析,字符的第六位&0,就是数字本身。
[/Quote]

怎么一说效率就想汇编呢?郁闷。。。直接写机器码吧。。还不用转。
Baesky 2010-02-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 freshow 的回复:]
string csNum = "13858095875";
转成
DWORD dwNum = 13858095875;

要求:效率越高越好
[/Quote]

用内联汇编分析,字符的第六位&0,就是数字本身。
DontKissBossAss 2010-02-06
  • 打赏
  • 举报
回复
不知道有没有错,基本上就是这个意思。。。。
DontKissBossAss 2010-02-06
  • 打赏
  • 举报
回复
  __int64 j =0;
__int64 tmp=1;
for(string::reverse_iterator rbe = i.rbegin();rbe!=i.rend();rbe++)
{

j+= (*rbe -'0')*tmp;
tmp*=10;
}
cout<<j<<endl;
梦之安魂曲 2010-02-06
  • 打赏
  • 举报
回复
BOOST库里有lexical_cast<>
这个很好用。
耍宝王 2010-02-06
  • 打赏
  • 举报
回复
DWORD dwNum = atol (csNum.c_str());

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧