在C++里如何计算数字的长度?

clergy1986 2010-10-15 02:48:56
各位大牛:
C++里如果是string类型的数据,可以用s.size()来得到s的长度,但是如果是数字呢?怎么得到它的长度?有没有相应的库函数。我记得C语言里有个sizeof,不知道C++里用什么库函数?
我不想自己编个统计数字长度的函数。请告诉我库的名称,以及此函数的函数原型。谢谢大家。
int num = 345;
length = 调用函数;
length = 3;
...全文
8315 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
oliver_wei 2010-10-15
  • 打赏
  • 举报
回复
template<typename _T>
size_t GetLength(const _T& t)
{
std::ostringstream os;
os<<t;
return os.str().size();
}
clergy1986 2010-10-15
  • 打赏
  • 举报
回复
恩,是我欠考虑。哈哈。谢谢你。[Quote=引用 18 楼 k80179279 的回复:]
呵呵,012若是数字的话,本就是12,也就是只有2位啊。
若是012,那“012”就是字符串了。。非数字也。

引用 15 楼 clergy1986 的回复:
如果输入是012,返回结果就是2。此为bug。

引用 9 楼 k80179279 的回复:
C/C++ code

int GetIntLength(int i)
{
int len=1;
if(i<0) i = ……
[/Quote]
zrebecca 2010-10-15
  • 打赏
  • 举报
回复
sizeof也不能的,sizeof只能给出你变量类型的长度,比如 int 3,长度为4.
所以这种情况,你自己写个函数
ZzhHopeless 2010-10-15
  • 打赏
  • 举报
回复
按LZ的说法,012也想要输出3位的话,那就不要用int保存客户输入

因为int会把012保存成12,这不是函数的问题

LZ应该把输入部分按照字符串接收,然后将非数字部分(不在0~9之间)字符丢弃,得到一个只包含数字

的字符串,然后处理字符数就好啦
k80179279 2010-10-15
  • 打赏
  • 举报
回复
呵呵,012若是数字的话,本就是12,也就是只有2位啊。
若是012,那“012”就是字符串了。。非数字也。
[Quote=引用 15 楼 clergy1986 的回复:]
如果输入是012,返回结果就是2。此为bug。

引用 9 楼 k80179279 的回复:
C/C++ code

int GetIntLength(int i)
{
int len=1;
if(i<0) i = -i;
for(;i/10>0; i /= 10)
++len;
return len;
}
[/Quote]
ZzhHopeless 2010-10-15
  • 打赏
  • 举报
回复
按照LZ的说法

输入012也要显示3位的话,那你就不要用整数来接收用户输入。

因为你用int值保存012的话,系统就给转化成12了,所以不是函数的问题。

你可以用字符串保存用户输入,然后遍历字符串将非数字(不在0~9之间的字符丢弃),将数字部分重新

保存进新的字符串,然后处理这个新字符串的个数就行啦。
ZzhHopeless 2010-10-15
  • 打赏
  • 举报
回复
#include <string>
int main()
{
using namespace std;

char szArray[100] = {0}; // 中间变量
int a(123); // 目标值
_itoa(a, szArray, 10);
string str(szArray);
cout << str.size() << endl; // 法1

memset(szArray,0 ,100);
cout << sprintf(szArray,"%d",a) << endl; // 法2
return 0;
}
clergy1986 2010-10-15
  • 打赏
  • 举报
回复
如果输入是012,返回结果就是2。此为bug。[Quote=引用 9 楼 k80179279 的回复:]
C/C++ code

int GetIntLength(int i)
{
int len=1;
if(i<0) i = -i;
for(;i/10>0; i /= 10)
++len;
return len;
}
[/Quote]
clergy1986 2010-10-15
  • 打赏
  • 举报
回复
assert干嘛用的。我刚学。[Quote=引用 5 楼 clergy1986 的回复:]
你这是C语言的吧。有没有C++的?

引用 4 楼 zhao4zhong1 的回复:
char s[30];
int num = 345;
length = sprintf(s,"%d",num);
assert(length == 3);
[/Quote]
clergy1986 2010-10-15
  • 打赏
  • 举报
回复
“要么用一个字符串变量比如string保存这个数字,再用此变量的成员函数计算字符数”这种方法不可行。我试了。D:\C++_Projects\Chapter 4\4-2\1 to 100 square\square from 1 to 100\Main.cpp(20) : error C2664: 'push_back' : cannot convert parameter 1 from 'int' to 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &'[Quote=引用 12 楼 zzhhopeless 的回复:]
我觉得4楼朋友的方法靠谱。

你想知道一个数字有多少位要么格式化成字符串,然后计算字符数

要么用一个字符串变量比如string保存这个数字,再用此变量的成员函数计算字符数

最后就是自己根据数字是多少进制的自己写个方法出来就像7楼的朋友

现在好像C,C++都没有给出一个数字有多少位的现成方法吧。
[/Quote]
ZzhHopeless 2010-10-15
  • 打赏
  • 举报
回复
我觉得4楼朋友的方法靠谱。

你想知道一个数字有多少位要么格式化成字符串,然后计算字符数

要么用一个字符串变量比如string保存这个数字,再用此变量的成员函数计算字符数

最后就是自己根据数字是多少进制的自己写个方法出来就像7楼的朋友

现在好像C,C++都没有给出一个数字有多少位的现成方法吧。
clergy1986 2010-10-15
  • 打赏
  • 举报
回复
看来是一定要自己定义个函数了~ 囧~
k80179279 2010-10-15
  • 打赏
  • 举报
回复

int GetIntLength(int i)
{
int len=1;
if(i<0) i = -i;
for(;i/10>0; i /= 10)
++len;
return len;
}
k80179279 2010-10-15
  • 打赏
  • 举报
回复

int GetIntLength(int i)
{
int len=1;
if(i<0) i = -i;
for(;i/10>0; i /= 10)
++len;
return len;
}
k80179279 2010-10-15
  • 打赏
  • 举报
回复

int GetIntLength(int i)
{
int len=1;
if(i<0) i = -i;
for(;i/10>0; i /= 10)
++len;
return len;
}
clergy1986 2010-10-15
  • 打赏
  • 举报
回复
能实现就行,我要求不高。哈哈。[Quote=引用 6 楼 hongwenjun 的回复:]
好像 C++ 数字转字符效率不高,用 C的 sprintf 简单点
[/Quote]
hongwenjun 2010-10-15
  • 打赏
  • 举报
回复
好像 C++ 数字转字符效率不高,用 C的 sprintf 简单点
clergy1986 2010-10-15
  • 打赏
  • 举报
回复
你这是C语言的吧。有没有C++的?[Quote=引用 4 楼 zhao4zhong1 的回复:]
char s[30];
int num = 345;
length = sprintf(s,"%d",num);
assert(length == 3);
[/Quote]
赵4老师 2010-10-15
  • 打赏
  • 举报
回复
char s[30];
int num = 345;
length = sprintf(s,"%d",num);
assert(length == 3);
clergy1986 2010-10-15
  • 打赏
  • 举报
回复
而且这个还是要自己定义函数啊?[Quote=引用 1 楼 npuhuxl 的回复:]
sizeof()是计算变量占据内存空间的字节数的。

按照lz的意思可以这样
template<typename _T>
size_t GetLength(const _T& t)
{
std::ostringstream os;
os<<t;
return os.str().size();
}
[/Quote]
加载更多回复(2)

65,186

社区成员

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

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