2011-07-21 18 views

答えて

0

は最高の使用にatoi

をCHARからドットを削除して
最も簡単なのではなく、他の可能性のある方法のために、私の答えhereを参照してください。

+0

試しました。 'atoi'は小数点の前の部分だけを返します。 – Smurf64

2

は、文字列からのドット文字を削除し、アルス・サイスのよう

0

をintに直接変換し、atoi関数を使用していますが、ひねりを加えた、期間の文字列を削除し、atoi関数を使用してint型に結果を変換します。

1

文字列(char*)として保存されていますか?そして、あなたがあなた自身のパーサーを作成することができます。

int flstrtoint(const char *str) { 
    int r = 0; 
    int i = strlen(str) - 1; 

    while (i >= 0) { 
     if (isdigit(str[i])) { 
      r *= 10 
      r += str[i] - `0`; 
     } 
     i--; 
    } 

    return r; 
} 

flstrtoint("35.28"); // should return 3528 
+0

> //は3528を返すはずです しかし、OPは "35.28"と "35.280234"に対して35280を望んでいます – unkulunkulu

+0

これは単純に最後に '* = 10;または、最初にドットの位置を数え、次に正しい値を乗算します。 – orlp

4

最小限の基本的なコード:

std::string s = "35.28"; 
s.erase(std::remove(s.begin(), s.end(), '.'), s.end()); //removing the dot 
std::stringstream ss(s); 
int value; 
ss >> value; 
value *= 10; 
std::cout << value; 

出力:

35280 

オンラインデモ:http://ideone.com/apRNP基本的な考え方である

。上記のコードを作業して、他の番号にも使用できるように柔軟にすることができます。


EDIT:

int Convert(std::string s, int multiplier) 
{ 
    size_t pos = s.find('.'); 
    if (pos != std::string::npos) 
    { 
     pos = s.size() - (pos+1); 
     s.erase(std::remove(s.begin(), s.end(), '.'), s.end()); 
     while(pos) { multiplier /= 10; pos--; } 
    } 
    else 
     multiplier = 1; 
    std::stringstream ss(s); 
    int value; 
    ss >> value; 
    return value * multiplier; 
} 

テストコード:

int main() { 
     std::cout << Convert("35.28", 1000) << std::endl; //35.28 -> 35280 
     std::cout << Convert("3.28", 1000) << std::endl; //3.28 -> 3280 
     std::cout << Convert("352.8", 1000) << std::endl; //352.8 -> 352800 
     std::cout << Convert("35.20", 1000) << std::endl; //35.20 -> 35200 
     std::cout << Convert("3528", 1000) << std::endl; //no change 
     return 0; 
} 

出力:

35280 
3280 
352800 
35200 
3528 
ここ

一の柔軟なソリューションであります

オンラインデモ:http://ideone.com/uCujP

+1

出力に一貫性はありません。 3528は35.28が35280になっている間は同じままです。1000は何も意味しません.SIGの数字を意味するものではなく、10進数のアライメントを保証しません。正確に何を保証しようとしていますか?小数点以下の文字列(すでにint)に元の乗数ではなく1を掛けます。 –

関連する問題