字符串转换为数字值的函数

wade_2003 2013-01-21 09:45:16
这是 《C primer plus+》 第15章 编程练习题。

编写一个将二进制字符串转化为数字值的函数,也就是说如果有以下语句:
char * pbin = “01001001”;
那么您可以将pbin 作为一个参数传送给该函数,使函数返回一个int值 25.

我没明白,字符串转换后怎么算得的int值为25?我觉得应该是71.
...全文
270 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joseph_ 2013-01-21
  • 打赏
  • 举报
回复
引用 10 楼 GIS_wudi 的回复:
那是你的程序写错了 int r = 0; while(*p) { r = (r << 1 ) + *p++ - '0'; }
顶! 不错.
wade_2003 2013-01-21
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int invert(const char *,int );
int main(void)
{
	int zhi,number;
	char *pstr ="010111010";
	number = strlen(pstr);
	zhi = strtol(pstr, NULL, 2);
	printf("%d",invert(pstr,number));

	return 0;
} 
int invert(const char *str,int n)
{
	int num;
	int i,sum =0;
	for(i=n-1;i>=0;i--)
	{
		if(*(str+i)=='1')
		  sum += 1 * pow(2,(n-1-i));
         else
           sum += 0 *pow(2,(n-1-i));
	}
	return sum;
}
我这样写,虽然能实现,但是有没有好的方法啊?
GIS_wudi 2013-01-21
  • 打赏
  • 举报
回复
while{*p) -> while(*p != '\0')
GIS_wudi 2013-01-21
  • 打赏
  • 举报
回复
那是你的程序写错了 int r = 0; while{*p) { r = (r << 1 ) + *p++ - '0'; }
漫步者、 2013-01-21
  • 打赏
  • 举报
回复
没有什么好的办法,逐位取出,是2的i次方,向前移动,直至数组下标为-1就好了
wade_2003 2013-01-21
  • 打赏
  • 举报
回复
引用 7 楼 ganpengjin1 的回复:
引用 5 楼 wade_2003 的回复: C/C++ code ? 1234567891011121314151617181920212223242526 #include <stdio.h> #include <stdlib.h> #include <string.h> int invert(const char *,int ); int main(void) { ……
嗯,我明白了为什么是41了,因为数字1001001的二进制为11110100011000101001,所以在计算的时候变成41了。现在一位一位计算的时候,我怎么把字符转换为 数字呢?
漫步者、 2013-01-21
  • 打赏
  • 举报
回复
引用 5 楼 wade_2003 的回复:
C/C++ code ? 1234567891011121314151617181920212223242526 #include <stdio.h> #include <stdlib.h> #include <string.h> int invert(const char *,int ); int main(void) { int number; cha……
你理解错了,01001001字符串转成数字为1001001,你的移位是将它的二进制移位,所以会是41!你还是采用从末尾开始计算,向前移动,直到数组下标为-1结束!就可以了。
漫步者、 2013-01-21
  • 打赏
  • 举报
回复
73,果断的.
wade_2003 2013-01-21
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int invert(const char *,int );
int main(void)
{
	int number;
	char *pstr ="01001001";
	number = strlen(pstr);
	printf("%d",invert(pstr,number));
	return 0;
} 
int invert(const char *str,int n)
{
	int num;
	int i,sum =0;
	num = atoi(str);
	for(i=0;i<n;i++)
	{
		sum += (01 & num)* pow(2,i);
		num >>= 1;
	}
	return sum;
}
我写的这个程序怎么是 41 ,不是71呢? 这个程序的问题在哪里,请高手指点一下,谢谢!
mymtom 2013-01-21
  • 打赏
  • 举报
回复
被自己搞糊涂了,是73啊!
GIS_wudi 2013-01-21
  • 打赏
  • 举报
回复
可以烧书了,当然答案也不是你所说的71
mymtom 2013-01-21
  • 打赏
  • 举报
回复
确实是71啊! 用 strtol(pbin, NULL, 2); 就可以!
lin5161678 2013-01-21
  • 打赏
  • 举报
回复
着急了 结果是 73吧 十六进制的49

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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