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