2017-06-13 81 views
1

我無法獲得以下功能的預期輸出。爲什麼我得到相同的字符串輸出?

in.txt文件

-rw-r--r-- 1 air staff StructEx.cpp 
-rw-r--r-- 1 air staff Struct2ex.cpp 
drwxr-xr-x 3 air staff app.dSYM 
-rw-r--r-- 1 air staff MyStruct.cpp 

除外 - 從以上in.txt文件4頁的內容打印第1列和列。像下面

-rw-r--r--StructEx.cpp 
-rw-r--r--Struct2ex.cpp 
drwxr-xr-xapp.dSYM 
-rw-r--r--MyStruct.cpp 

實際輸出一些東西 -

-rw-r--r--tructEx.cpp 
-rw-r--r--tructEx.cpp 
-rw-r--r--tructEx.cpp 
-rw-r--r--tructEx.cpp 

上面的輸出是錯的,什麼我下面的字符串流功能缺失英寸

void readingFromFile2(){ 

     ifstream inputFile("in.txt"); 
     string line; 
     stringstream entireLine; 
     char s = ' '; 
     string p1, p2, p3, p4, p5; 

     while(!inputFile.fail()){ 
     getline(inputFile, line); 
     entireLine << line; 
     entireLine >> p1 >> s >> p2 >> s >> p3 >> s >> p4 >> s >> p5 ; 
     cout << p1 << p4 << endl ; 
     } 

    } 

從重要的評論編輯,我想下面的功能更有意義,但還是一樣的出去放

void readingFromFile2(){ 

    ifstream inputFile("in.txt"); 
    string line; 
    stringstream entireLine; 
    char s = ' '; 
    string p1, p2, p3, p4, p5; 
    char n ='\n'; 

    while(getline(inputFile, line)){ 
    entireLine << line; 
    entireLine >> p1 >> p2 >> p3 >> p4 >> p5 ; 
    cout << p1 << p4 << endl ; 
    } 
} 

更新 - 整個代碼

#include <iostream> 
#include <fstream> 
#include <sstream> 

using namespace std; 

void readingFromFile2(); 

int main(){ 
    readingFromFile2(); 
} 

void readingFromFile2(){ 

    ifstream inputFile("in.txt"); 
    string line; 
    stringstream entireLine; 
    string p1, p2, p3, p4, p5; 
    while(getline(inputFile, line)){ 
    entireLine << line; 
    entireLine >> p1 >> p2 >> p3 >> p4 >> p5 ; 
    cout << p1 << p2 << p3 << p3 << p4 << p5 << endl ; 
    } 
} 

現在是工作, 使用stringstream entireLine(line);而不是entireLine << line;

+1

除非你的教授是在使用了iostream的LIB堅持,讓您的生活更輕鬆,並使用正則表達式。並且絕對不要在現實世界中使用C++ iostream庫。他們很可怕。 (很明顯) – EdH

+0

將entireLine解析爲字符串會跳過空格。嘗試沒有「s」字段。 – Rakurai

+1

流已經解析了空的空間。通過提供's',他們不需要「額外的幫助」。 – PaulMcKenzie

回答

5

在使用>>流輸入你應該使用

entireLine >> p1 >> p2 >> p3 >> p4 >> p5 ; 

因爲空間(' '\t\n)將被忽略。

UPDATE:

爲什麼 「-RW-R - R-- 1個空軍參謀StructEx.cpp」 給出tructEx.cpp而不是staff當使用entireLine >> p1 >> s >> p2 >> s >> p3 >> s >> p4 >> s >> p5 ;

讓我們來看看一步一步:

1)entireLine >> p1

串,直到第一空間被讀取到p1-rw-r--r--p1

2)entireLine >> s

跳過空間1轉到s

3)entireLine >> p2

跳過空間和air進入p2

4)entireLine >> s

跳過空間和s(的staff開頭)轉移到s

5)entireLine >> p3

只讀taffp3

6)entireLine >> s

跳過空間和S(的StructEx.cpp開始)去s

7)entireLine >> p4

最終我們價值p4,這是tructEx.cpp,因爲在步驟6)採取Ss

更新2

簡化的演示:

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

using namespace std; 

int main() { 
    string line = "-rw-r--r-- 1 air staff StructEx.cpp"; 
    stringstream entireLine; 
    char s = ' '; // not required 
    string p1, p2, p3, p4, p5; 
    char n = '\n'; // not required 

    entireLine << line; 
    entireLine >> p1 >> p2 >> p3 >> p4 >> p5; 
    cout << p1 << ", " << p2 << ", " << p3 << ", " << p4 << ", " << p5 << endl; 

    return 0; 
} 

enter image description here

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

using namespace std; 

int main() { 
    string line = "-rw-r--r-- 1 air staff StructEx.cpp"; 
    stringstream entireLine; 
    char s = ' '; // initialization has no sense 
    string p1, p2, p3, p4, p5; 
    char n = '\n'; // not required 

    entireLine << line; 
    entireLine >> p1 >> s >> p2 >> s >> p3 >> s >> p4 >> s >> p5; // HERE!!! 
    cout << p1 << ", " << p2 << ", " << p3 << ", " << p4 << ", " << p5 << endl; 

    return 0; 
} 

產生

enter image description here

最後更新

void readingFromFile2(){ 

    ifstream inputFile("in.txt"); 
    string line; 
    //stringstream entireLine; 
    string p1, p2, p3, p4, p5; 
    char str[51]; 
    while (getline(inputFile, line)){ 
     stringstream entireLine(line); //entireLine << line; 
     entireLine >> p1 >> p2 >> p3 >> p4 >> p5; 
     cout << p1 << p4 << endl; 
    } 
} 
+0

它是否適合你?它不工作。我試了兩次,沒有謝謝 – irobo

+0

在'while'語句中改變條件 – VolAnd

+0

很好的解釋了我的詳細問題,但問題是當我從文件的下一行讀取它沒有改變時,我改變了,而b ut仍然,它得到相同的輸出 – irobo

相關問題