題目描述: 若字符串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; }