2014-02-24 44 views
-2

我有一串數字,我想乘這些數字轉換字符串元素爲整數C++

string myS = "731671765313"; 
int product = 1; 
    for(int i = 0; i<myS.length(); i++) 
     product *= myS[i]; 

如何將字符串元素爲int,因爲結果是完全錯誤的轉換。 我嘗試了強制轉換爲INT但不成功。

+1

你不能隨便把一個ASCII字符「鑄造」成一個整數,並希望得到一個數字!你認爲'(int)'a''的確如此? ;) –

+0

是否要乘以所有數字?然後字符爲int的轉換是'(MYS [I] - '0')',否則這是一個重複,你應該使用'的std :: stoi' – example

+0

我想'的atoi(MYS [1])'和'Stoi旅館( MYS [1])'......錯誤 – Misaki

回答

4

使用std::accumulate(因爲您正在積累元素的產品,因此它意圖清晰)並且回想一下'0'不是0,而是數字字符是連續的。例如,在ASCII,'0'是48,'1'是49,等。因此,減去'0'將該字符轉換(如果它是一個數字)到適當的數值。

int product = std::accumulate(std::begin(s), std::end(s), 1, 
    [](int total, char c) {return total * (c - '0');} 
); 

如果您不能使用C++ 11,它很容易更換:

int multiplyCharacterDigit(int total, char c) { 
    return total * (c - '0'); 
} 

... 

int product = std::accumulate(s.begin(), s.end(), 1, multiplyCharacterDigit); 

如果沒有這些的是一種選擇,你有幾乎有:

int product = 1; 
    for(int i = 0; i<myS.length(); i++) 
     product *= (myS[i] - '0'); 
+2

您的解決方案需要符合C++ 11標準的語言實現,您應該指定。 – user2485710

+0

@ user2485710,據我所知,默認情況下,C++標籤是C++ 11,但我已經做出了調整。 – chris

+0

謝謝最後的答案。 – Misaki