文章标题 整数与字符串互转
来源:互联网 发布:八百字淘宝导购 编辑:程序博客网 时间:2024/06/05 05:27
先来看两个错误的实现
1.
//整数转换成字符串void IntToString(char* str,int n){ int i = 0; if( n < 0 ) { n = -n;//这里错误,若n=-2147483648,那么n=-n后,你还是为-2147483648 str[i++] = '-';//如果是负数字符串第一个字符为'-' } while( n/10 != 0 )//将整数反序放入字符串中 { str[i++] = n%10 + '0'; n /= 10; } str[i++] = n + '0'; str[i] = '\0';//别忘了字符串结束标记 i--;//i 指向最后一个字符的下标 int j = 0,sign=0; if(str[0] == '-' ) {j=1;sign=1;} for ( ; j <= i/2 ; j++ )//将字符串反序 { char temp = str[j]; str[j] = str[i-j+sign]; str[i-j+sign] = temp; }}
- 2.
//字符串转换整数int StringToInt(char* str)//仅仅考虑到正常的输入,且没有考虑超出int的范围。{ if (str == NULL){return 0;} int result = 0; bool b = true; if( *str == '-' || *str == '+' ) { if( *str = '-' ) b = false; str++; } while( *str != '\0' ) { if( *str < '0' || *str > '9' ) {return -1;} else { result = 10*result + (*str - '0'); } str++; } return (b ? result : -result);}
3.
int main (){ int num = 12345; char a[10]; IntToString(a,num); std::cout <<a; std::cout <<StringToInt(a); return 0;}
下面实现atoi()
int my_atoi(const char* str){ int sign = 1; int ret = 0; int i = 0; int n = strlen(str); int max = ~(1 << (8 * sizeof(int) - 1));//最大的int assert(str != NULL); while (str[i] == ' '&& i < n){++i;} if (str[i] == '+'){ ++i; } else if (str[i] == '-'){ ++i; sign = -1; } for (; i<n; ++i){ if (str[i] < '0' || str[i] > '9'){ break; } if (ret > max / 10 || ret == max / 10 && ((str[i] - '0')>max % 10)){ return sign == -1 ? (-1 - max) : max; } ret = ret * 10 + str[i] - '0'; } return ret*sign;}
//把字符串按基数base转化为long intlong int my_strtol(const char* str, char** endptr, int base){ //static char table[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; long ret = 0; int sign = 1; int n = strlen(str); int i = 0; long int max = ~(1 << (8 * sizeof(long int) - 1)); assert(base == 0 || (base >= 2 && base <= 36)); while (str[i] == ' ' && i < n){ ++i; } if (str[i] == '+'){ ++i; } else if (str[i] == '-'){ ++i; sign = -1;} if (!(i < n)){ if(NULL!=endptr)*endptr = (char*)&str[i]; return sign*ret; } if (base == 0 || base == 16){ if (str[i] == '0' && (str[i + 1] == 'x' || str[i + 1] == 'X')){ i += 2; base = 16; }//仅仅考虑了正确情况下的16进制字符串 else if (str[i] == '0'){ i += 1; base = 8; }//注意这里两处的base赋值 } for (; i < n; ++i){ if (base <= 10){ if (str[i] < '0' || str[i] > '0' + base){ break; } if (ret > max / 10 || ret == max / 10 && ((str[i] - '0')>max % 10)){ return sign == -1 ? (-1 - max) : max; } ret = ret * base + str[i] - '0'; } else{ if ((str[i] >='0'&&str[i] <='9') || (str[i] >= 'A' &&str[i]<'A'+base-10) || (str[i] >= 'a' &&str[i]<'a' + base - 10) ){ if (ret > max / 10 || ret == max / 10 && ((str[i] - '0')>max % 10)){ return sign == -1 ? (-1 - max) : max; } if (str[i] >= 'a'){ ret = ret * base + str[i] - 'a' + 10; } else if (str[i] >= 'A'){ ret = ret * base + str[i] - 'A' + 10; } else{ ret = ret * base + str[i] - '0'; } } else{ break; } } } if (NULL != endptr)*endptr = (char*)&str[i]; return sign*ret;}
阅读全文
0 0
- 文章标题 整数与字符串互转
- 整数与字符串互转
- C/C++整数与字符串互转
- 整数与字符串转换
- 整数与字符串转化
- 文章标题 复习字符串中的==与equal的区别
- 文章标题字符串长度的判断
- 字符串,整数的互转
- 字符串和整数互转
- 关于字符串、整数互转
- php字符串转与整数比较,会把字符串转化为整数来比较
- 字符串与整数互相转换
- Java整数与字符串转换
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- ping 命令
- 51nod 1247 可能的路径
- 数据结构--用C语言描述 耿国华 期中测试题
- 《本次项目开发有感》---自己老师的感悟
- 百度携手农行,用人工智能勾画Fintech未来模样
- 文章标题 整数与字符串互转
- [leetCode刷题笔记]47. Permutations II
- 大数据用户画像方法与实践(干货 转帖)
- jQuery 取选中的radio的值方法
- 自己-1
- 数据库日期函数
- 数据结构--用C语言描述 耿国华 期末试题
- WebSocket 和 Socket 的区别
- 数据结构排序算法