2013-06-27 64 views
-1

我有我的代碼C++字符串,它是像所有的整數:總和在字符串C++

"1 2 3 4 5 6 7 8" 

我知道這個字符串由一個空格字符分隔的整數。我如何總結他們?

我相當的C++新手,在Java中我會簡單地做:

String str = "1 2 3 4 5 6 7 8"; 
int sum = 0; 


for (int i = 0; i < str.split(" ").length; i++ { 
    sum += Integer.parse(str.split(" ")[i]; 
} 

我該怎麼辦就這樣與C++我的字符串對象?

有人建議我stringstream但我仍然不明白這個對象,我需要完全讀取字符串,獲取其中的每一個數字。

在此先感謝!

更新:有些人很好地試圖幫助我,但仍然無法正常工作。也許是因爲我之前沒有澄清我的問題的一些怪癖。所以這裏有雲:

#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 


int main() 
{ 
freopen("variable-exercise.in", "r", stdin); 

int sum = 0, start = 0; 
string line; 


while(getline(cin ,line)) { 
    istringstream iss(line); 

    while(iss >> start) { 
     sum += start; 
    } 

    cout << start << endl; 
    sum = start = 0; 
} 

return 0; 
} 

啊,輸入文件包含以下內容:

1 
3 4 
8 1 1 
7 2 9 3 
1 1 1 1 1 
0 1 2 5 6 10 

因此,對於每一行,程序必須打印所有整數的和在串線。這個例子將產生:

1 
7 
10 
21 
5 
24 

感謝

回答

5

有人建議我stringstream的,但我仍然無法理解這樣的對象,我需要閱讀完全

我猜你的字符串得到了很好的建議。使用std::istringstream,您可以逐個讀取值,因爲您可以從標準輸入(或任何其他輸入流)中讀取值。

例如:

#include <sstream> 
#include <string> 
#include <iostream> 

int main() 
{ 
    // Suppose at some time you have this string... 
    std::string s = "1 2 3 4 5 6 7 8 9 10"; 

    // You can create an istringstream object from it... 
    std::istringstream iss(s); 

    int i = 0; 
    int sum = 0; 

    // And read all values one after the other... 
    while (iss >> i) 
    { 
     // ...of course updating the sum each time 
     sum += i; 
    } 

    std::cout << sum; 
} 
+0

顯式構建'std :: string'的原因是什麼? – 2013-06-27 18:33:02

+1

@ H2CO3:沒有特別的理由,我認爲在某些時候,OP可能最終會產生一個「字符串」對象(可能由某種其他函數構造),並希望從中得到數字。 –

+0

好的,我明白了,謝謝。 – 2013-06-27 18:34:41

0

像這樣:

std::stringstream s("1 2 3 4 5 6 7 8 9"); 
int n = 0; 
int x; 
while (s >> x) 
    n += x; 

std::cout << n << std::endl; 

您的編輯後:

cout << start << endl; 

這是不對的,你應該打印sum代替:

cout << sum << endl; 
+0

無效:/請參閱我的更新請 – rodrigoalves

+0

@rodrigoalves(什麼樣的更新?沒有對您的問題進行編輯。)那麼,它**必須工作。 [演示。](http://ideone.com/OpIIPH) – 2013-06-27 18:36:37

+0

對不起,我在實際完成更新之前評論過。它是。對不起。 – rodrigoalves

0

我用C代碼來解決這個問題。這是最終的解決方案:

#include <stdio.h> 
#include <string.h> 

int main() { 
    char *c; 
    char line[100]; 
    int x, sum = 0; 

    while(gets(line)) { 
     for(c = strtok(line, " "); c ; c = strtok(NULL, " ")) { 
      sscanf(c, "%d", &x); 
      sum += x; 
     } 

     printf("%d\n", sum); 
     sum = 0; 
    } 

    return 0; 
} 

希望它可以幫助任何人可能有同樣的問題!