2012-09-04 17 views
0

需要編寫將一個字符串轉換爲雙無需調用一個函數任何內置的實用程序,如atof()Double.parseDouble()Double.valueOf()[NSString doubleValue][NSScanner scanDouble]std::stringstream或任何類似的方法。字符串到雙無需調用任何內置的實用工具

+5

。家庭作業?標籤,然後 – Geoffroy

+0

字符串的格式是什麼?它是本地化的?分組分隔符?指數? – Sulthan

回答

3
const char *s = "-123.456"; 
int sign = 1; 
int hasdp = 0; 
int dplaces = 0; 
float f = 0.0; 
while(*s) { 
    switch (*s) { 
    case '-': sign = -1; break; 
    case '.': hasdp = 1; break; 
    default: 
     f *= 10; 
     f += *s - '0'; 
     break; 
    } 
    s++; 
    if (hasdp) dplaces++; 
} 

f *= sign; 
int i; 
for (i = 1; i < dplaces; i++) f /= 10; 
// we need to start from 1 in order to get 
// the correct result, this is a property 
// of this algorithm 

現在f將包含解析值,只要它的格式是正確的(可選 - 前綴,可選的小數點後面1個或多個小數位

2

嘗試以下操作:

- (void)myMethod:(NSString *)numberString{ 
    int i = 0; 
    float number = 0.0; 
    while ([numberString length] > i) { 
     NSString *myChar = [numberString substringWithRange:NSMakeRange(i, 1)]; 
     NSLog(@"%@", [numberString substringWithRange:NSMakeRange(i, 1)]); 
     i++; 
     if ([myChar isEqualToString:@"1"]){ 
      number = number * 10 + 1; 
     } else if ([myChar isEqualToString:@"2"]){ 
      number = number * 10 + 2; 
     } else if ([myChar isEqualToString:@"3"]){ 
      number = number * 10 + 3; 
     } else if ([myChar isEqualToString:@"4"]){ 
      number = number * 10 + 4; 
     } else if ([myChar isEqualToString:@"5"]){ 
      number = number * 10 + 5; 
     } else if ([myChar isEqualToString:@"6"]){ 
      number = number * 10 + 6; 
     } else if ([myChar isEqualToString:@"7"]){ 
      number = number * 10 + 7; 
     } else if ([myChar isEqualToString:@"8"]){ 
      number = number * 10 + 8; 
     } else if ([myChar isEqualToString:@"9"]){ 
      number = number * 10 + 9; 
     } else if ([myChar isEqualToString:@"0"]){ 
      number = number * 10 + 0; 
     } 
    } 
} 
+1

其提到的不使用任何內置實用程序,如[NSString doubleValue] –

+0

至少使ef要閱讀這個問題的堡壘...... ** – 2012-09-04 10:02:47

+0

這也是一個非常低效且必要的複雜解決方案...... – 2012-09-04 10:40:00

相關問題