程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 面試100題系列之15將字符串轉換成數

面試100題系列之15將字符串轉換成數

編輯:C++入門知識

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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved