【C++ Primer】自己动手编写函数 atoi(char *str)
来源:互联网 发布:淘宝开学爆到是什么 编辑:程序博客网 时间:2024/06/16 01:58
一,要求:自己动手编写 atoi(char *str)函数,功能是将字符串变成数字
简单版本:
需要考虑的地方 1)正负号
2)仅仅考虑十进制
3)如何把数字 字符 变成整数
4)每个字符是否是数字
#include <iostream>using namespace std;int StrToInt(char * str){ int value = 0; int sign = 1; if(*str == '-')//负号 { sign = -1; str++; } while(*str>='0' && *str<='9')// 此法很巧妙,直接从高位开始乘加即可,不用考虑字符串的长度 { value = value * 10 + *str - '0'; str++; } return sign*value;}int main(){cout<<StrToInt("123")<<endl;return 0;}
当然也可以利用strlen或找结束字符的方式寻找最低位,乘数变化即可
二,加强版
下面的程序考虑了八进制、十进制、十六进制的字符串。
int StrToInt(char * str){ int value = 0; int sign = 1; int radix; if(*str == '-') { sign = -1; str++; } if(*str == '0' && (*(str+1) == 'x' || *(str+1) == 'X')) { radix = 16; str += 2; } else if(*str == '0') // 八进制首字符为0 { radix = 8; str++; } else radix = 10; while(*str) { if(radix == 16) { if(*str >= '0' && *str <= '9') value = value * radix + *str - '0'; else value = value * radix + (*str | 0x20) - 'a' + 10; // value = value * radix + *str - 'a' + 10; // 也没问题啊 } else value = value * radix + *str - '0'; str++; } return sign*value;}整数转换为字符串void itoa (int n,char s[]){int i,j,sign;if((sign=n)<0)//记录符号 n=-n;//使n成为正数 i=0;do{ s[i++]=n+’0’;//取下一个数字}while ((n/=10)>0);//删除该数字if(sign<0) s[i++]=’-’;s[i]=’\0’;for(j=i;j>=0;j--)//生成的数字是逆序的,所以要逆序输出 printf("%c",s[j]);}
- 【C++ Primer】自己动手编写函数 atoi(char *str)
- int atoi(char *str) 函数实现
- atoi函数 int m_atoi(char* str)
- C语言 为下面的函数原型编写函数定义:int ascii_to_integer(char *str)
- int atoi(const char * str)
- 编写一个函数 char *my_strrchr(char const *str,int ch)
- 编写函数int count_number_string(char str[])和函数int maxnum_string(char str[])
- 为函数原型编写函数定义: int ascii_to_integer(char *str);
- C系列函数原型之-StrStr(char *str,char *subStr)的实现
- int atoi(const char *str)库函数实现
- C char str[] , char *str 区别
- C/C++面试之算法系列--atoi(char *str)将字符串转换成整数
- C/C++面试之算法系列--atoi(char *str)将字符串转换成整数
- char *strchr(char *str,char character)函数
- 自己动手写C语言库函数(6) atoi
- 编写一个函数 char *my_strnchr(char const *str,int ch,int which)
- 【LVL1_5_c】【课后练习】【6】编写一个char_search(char str[],char c),比较字符串和字符。
- 编写函数void change(char *a,char *b,char*c)。
- Document Fingerprinting in MATLAB
- android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
- 轻松实现类VC界面
- 加载LSI驱动
- MFC中如何让弹出窗口在任务栏显示图标?
- 【C++ Primer】自己动手编写函数 atoi(char *str)
- MFC中如何去掉CPropertySheet界面下方的四个按钮?
- Direct2D 1.1
- Poj 1915 骑士遍历
- PeopleTools 8.50 Hints & Tips: Configuring Report Manager
- 一些博客和代码的提醒
- android中解析后台返回的json字符串
- Java源码中的发现:快速判断一个int值是几位数
- *temp++=1问题