2014-01-29 81 views
2

我的輸入格式:如何正確分割字符串中的數字?

192,21,4 33,2,1 23,7,61

,我想只獲得數字。

#include <iostream> 
#include <string> 
#include <sstream> 
#include <cmath> 
using namespace std; 

int strtoint(const std::string str){  //converting the string to integer 
    float a = str.length(); 
    int result = 0; 
    for(int i=1; i<=str.length(); i++){ 
      result+=(str[i-1]-'0')*pow(10,(a-1)); 
      a--; 
    } 
    return result; 
} 

int main() 
{ 
    string name; 
    string segment; 
    while(getline (cin,name, ' ')){ 
     stringstream test(name); 
     while(getline(test, segment, ',')) 
      { 
       cout << segment <<" "<<strtoint(segment)<<endl; 
      } 
    } 
    return 0; 
} 

我沒有獲得最後一個(61)。所以輸出是192 21 4 33 2 1 23 7.

如何獲得所有數字?

+1

我只是跑這ideone並得到了所有9個整數,印刷兩次,每次在單獨一行:http://ideone.com/lvzTpq – Derek

+0

@notch,你也在輸出結束時得到572?我相信這可能是因爲getline在61末尾添加換行符(「\ n」)來分割字符串。如果完全不顯示,getline不知道返回,因爲它沒有接收空格(「」 )也不是換行符(「\ n」) –

+0

Derek的輸入在61之後加上換行符。'getline'不關心\ n,也刪除了分隔符。 – Peter

回答

1

我不知道爲什麼你的實現不能與你提供的輸入一起工作 - 德里克在應該工作的意見中表明。任何它理解錯誤的額外字符都會被你的程序解釋爲數字,所以如果有一些隱藏的輸入(tab,newline,dot而不是逗號等),它應該輸出垃圾而不是61,而不是任何東西。

與其使用getline,我會使用其他方式來分割字符串。主要是因爲getline意味着它讀取整條線,因此其他人很難理解你實際做了什麼。請參閱此線索以瞭解如何拆分字符串:Split a string in C++?

解析數字時,只要遇到意外字符(例如「a」),就會遇到問題。有更好更簡單的方法來解析數字:How to parse a string to an int in C++?

0

如果在61之後沒有輸入空格(「」),getline將不會返回,因此從不打印61.它在接收到換行符後不會返回(「 \ n「)如果您指定了一個分隔符。

1

如何:

int main() 
{ 
    std::string input = "192,21,4 33,2,1 23,7,61"; 
    std::stringstream lineStream(input);  

    std::vector<int> numbers; 
    std::string number; 

    while (std::getline(lineStream, number, ',')) 
    { 
     numbers.push_back(atoi(number.c_str())); 
    } 

    for (int n : numbers) 
    { 
     std::cout << n << " "; 
    } 
} 
+0

不錯! ,但是當用戶輸入輸入時,輸出不正確 – sarikaya

+0

您可以將第一行更改爲'std :: string input; std :: cin >> input;'它會工作得很好。 – jaho

+0

我試了一下,但是輸出剛剛變成了192,21,4。所以,在空格被忽略之後 – sarikaya