将数字字符串转化为整数
题目描述: 若字符串str1为"-1234" 则输出整数-1234
#include<stdio.h> #include<assert.h> int string_to_number(char* str) { assert( str ); int sum = 0; //保存累加的结果 int i = 0; int k = 1; //每个位的权值,从个位开始 while(str[i]!='\0') //统计字符串中字符个数 { i++; } if(str[0] == '-') //前面有"-"的情况 { //扫描一遍看 for(int j =i-1; j > 0; j--)//因为前面有个负号,所以加权的范围是1 ~ i-1 { if(str[j] < '0'|| str[j] > '9') //中间如果有非数字字符,就终止 { assert(0); } sum += (str[j]-'0')*k; k =k * 10; } return (0 - sum); //将最后的结果取负,返回 } else if(str[0] == '+' )//前面有"+"的情况 { for(int j =i-1; j > 0; j--) { if(str[j] < '0'|| str[j] > '9') { assert(0); } sum += (str[j]-'0')*k; k =k * 10; } return sum; } else //前面没有"+","-"的情况 { for(int j =i-1; j >= 0; j--) { if(str[j] < '0'|| str[j] > '9') { assert(0); } sum += (str[j]-'0')*k; k =k * 10; } return sum; } } int main() { //char s[] = "+12~3"; //char s[] = "+123"; //char s[] = "123"; char s[] = "-123"; int num = string_to_number(s); printf("%d\n",num); return 0 ; }
参考答案:
#include <stdio.h> #include<malloc.h> #include<memory.h> #include<assert.h> int string_to_number(char* str) { assert(str); int i = 0; while(str[i] != '\0') //统计这个数字字符串的位数(不包括正负号),结果为i位 { if( '-'==str[0] ) //绕过前面的正负号 { i++; continue; } if(str[i]<'0' || str[i]>'9' ) //防止非字符串str中出现非数字字符 assert(0); i++; } int sum = 0; //作为存放整数结果的变量 int k = 1; if( '-'==str[0] ) //负数的情况下 { for(int j = i-1 ;j >0 ; j-- ) //将这个数字字符串重组,根据十进制数的原理 { sum += k*(str[j]-'0'); k = k*10; } sum = 0 -sum; } else //正数的情况下 { for(int j = i-1 ;j >=0 ; j-- ) //将这个数字字符串重组,根据十进制数的原理 { sum += k*(str[j]-'0'); k = k*10; } } return sum; } int main() { char str[] ="1234"; printf("转化前的数字字符串为%s\n",str); int a = string_to_number(str); //a为字符串中第一个出现一次的字母在数组中的位置,0代表没有这样的字符 printf("转化后的数字字符串为%d\n",a); return 0; }
补充:软件开发 , C++ ,