我有一串數字,我想乘這些數字轉換字符串元素爲整數C++
string myS = "731671765313";
int product = 1;
for(int i = 0; i<myS.length(); i++)
product *= myS[i];
如何將字符串元素爲int,因爲結果是完全錯誤的轉換。 我嘗試了強制轉換爲INT但不成功。
我有一串數字,我想乘這些數字轉換字符串元素爲整數C++
string myS = "731671765313";
int product = 1;
for(int i = 0; i<myS.length(); i++)
product *= myS[i];
如何將字符串元素爲int,因爲結果是完全錯誤的轉換。 我嘗試了強制轉換爲INT但不成功。
使用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');
您的解決方案需要符合C++ 11標準的語言實現,您應該指定。 – user2485710
@ user2485710,據我所知,默認情況下,C++標籤是C++ 11,但我已經做出了調整。 – chris
謝謝最後的答案。 – Misaki
你不能隨便把一個ASCII字符「鑄造」成一個整數,並希望得到一個數字!你認爲'(int)'a''的確如此? ;) –
是否要乘以所有數字?然後字符爲int的轉換是'(MYS [I] - '0')',否則這是一個重複,你應該使用'的std :: stoi' – example
我想'的atoi(MYS [1])'和'Stoi旅館( MYS [1])'......錯誤 – Misaki