1、輸入一個字符串,將其轉換成整數。注意,這裡沒說是正整數,所以需要考慮負數的情況。沒什麼技巧,直接算就可以了。只要考慮到負數就OK了,當然處理技巧也很重要。核心代碼如下:
[cpp]
//字符串轉換成整數
int StrToInt(char *str)
{
if(!str)
return -Inf;
int nLen = strlen(str);
int i = 0;
int ans = 0;
bool IsNag = false;
if(str[0] == '-')
{
IsNag = true;
i = 1;
}
for(; i < nLen; ++i)
{
ans = ans * 10 + str[i] - '0';
}
if(IsNag)
return -ans;
else
return ans;
}
//字符串轉換成整數
int StrToInt(char *str)
{
if(!str)
return -Inf;
int nLen = strlen(str);
int i = 0;
int ans = 0;
bool IsNag = false;
if(str[0] == '-')
{
IsNag = true;
i = 1;
}
for(; i < nLen; ++i)
{
ans = ans * 10 + str[i] - '0';
}
if(IsNag)
return -ans;
else
return ans;
}2、如果輸入一個字符串,轉換成數,可能有小數點。那就需要考慮小數點的位置的。這樣依靠小數點把字符串分成兩部分,整數部分和小數部分。分別計算就可以了。怎麼把代碼寫得簡潔好看,那就是技巧問題了。慢慢積累吧!代碼如下:
[cpp]
//字符串轉換成浮點數
double StrToDouble(char *str)
{
if(!str)
return -Inf;//對於double類型,可能這個Inf是不夠的
int nLen = strlen(str);
int i = 0;
double ans = 0.0;
bool IsNag = false;
if(str[0] == '-')
{
IsNag = true;
i = 1;
}
//整數部分
for( ; i < nLen; ++i)
{
if(str[i] == '.')
break;
ans = ans * 10 + str[i] - '0';
}
//小數部分
double flag = 10.0;
for(i = i + 1; i < nLen; ++i)
{
ans += (str[i] - '0') / flag;
flag *= 10.0;
}
if(IsNag)
return -ans;
else
return ans;
}
//字符串轉換成浮點數
double StrToDouble(char *str)
{
if(!str)
return -Inf;//對於double類型,可能這個Inf是不夠的
int nLen = strlen(str);
int i = 0;
double ans = 0.0;
bool IsNag = false;
if(str[0] == '-')
{
IsNag = true;
i = 1;
}
//整數部分
for( ; i < nLen; ++i)
{
if(str[i] == '.')
break;
ans = ans * 10 + str[i] - '0';
}
//小數部分
double flag = 10.0;
for(i = i + 1; i < nLen; ++i)
{
ans += (str[i] - '0') / flag;
flag *= 10.0;
}
if(IsNag)
return -ans;
else
return ans;
}3、OK,最後給出main函數。
[cpp]
#include<stdio.h>
#include<string.h>
const int Inf = 1e9;
int main()
{
const int N = 20;
char str[N];
while(scanf("%s", &str) != EOF)
{
//printf("%d\n", StrToInt(str));
printf("%lf\n", StrToDouble(str));
}
return 0;
}
#include<stdio.h>
#include<string.h>
const int Inf = 1e9;
int main()
{
const int N = 20;
char str[N];
while(scanf("%s", &str) != EOF)
{
//printf("%d\n", StrToInt(str));
printf("%lf\n", StrToDouble(str));
}
return 0;
}