在C++

2016-08-28 47 views
0

從外部文件掃描的完整線對於由C++中的文件進行掃描的完整線:在C++

當我使用inFile >> s;其中s是一個字符串,infile的是外部文件,它只是讀取來自該行的第一個字。

全碼:(我只是想通過掃描行的文件行並打印線的長度。)

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 
ifstream inFile; 
inFile.open("sample.txt"); 
long long i,t,n,j,l; 
inFile >> t; 
for(i=1;i<=t;i++) 
{ 
    inFile >> n; 
    string s[n]; 
    for(j=0;j<n;j++) 
    { 
     getline(inFile,s[j]); 
     l=s[j].length(); 
     cout<<l<<"\n"; 
    } 
} 
return 0; 
} 

Sample.txt的

2 
3 
ADAM 
BOB 
JOHNSON 
2 
A AB C 
DEF 

首先整數測試用例跟隨不要說話來。

+0

使用'的std :: getline'代替 –

+0

http://www.cplusplus.com/reference/fstream/ifstream/open/ – macroland

+0

'INFILE >> T;'在讀取'很久很久'它沒有讀到行尾。這會在以後導致很多悲傷。兩條建議:1.不要將'>>'與'std :: getline'混合使用,並且2.使用更好的可變名稱。我不能打擾調試字母湯。 – user4581301

回答

1

使用std :: getline函數;它是爲了這個確切的目的而制定的。你可以閱讀關於它here。在特定情況下,代碼如下:

string s; 
getline(infile, s); 
// s now has the first line in the file. 

要掃描整個文件,你可以把函數getline()在while循環,因爲它在文件的最後返回false(或者,如果不好的一點是讀)。因此,你可以這樣做:

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std;  

int main() { 
    ifstream inFile; 
    inFile.open("sample.txt"); 
    int lineNum = 0; 
    string s; 
    while(getline(infile, s) { 
     cout << "The length of line number " << lineNum << " is: " << s.length() << endl; 
    } 
    return 0; 
} 
+0

但是,如果有整數被掃描,我們必須混合'>>'與'標準:: getline'娜?? –

+0

@SaurabhShubham在使用getline()將行轉換爲字符串s後,可以使用字符串流使用流提取操作符(「>>」)將其拆分。 [Here](http://stackoverflow.com/questions/20594520/what-exactly-does-stringstream-do)就是一個例子 – gowrath