getline的兩種定義
參考http://blog.csdn.net/yelbosh/article/details/7483521
1.全局函數,在頭檔案
#include<string>
中,函數聲明為:
-
istream& getline ( istream& is, string& str, char delim )
-
istream& getline ( istream& is, string& str )
2. istream的成員函數,函數聲明為:
-
istream& getline (char* s, streamsize n )
-
istream& getline (char* s, streamsize n, char delim )
常用的是全局函數這種情況,getline函數的基本功能是将流
istream& is
中的字元串存到
string& str
當中去。
- 全局函數中兩種聲明的差別是第一種加了一個限定符号
,預設的限定符号為‘\n’,也即讀到一個換行符就終止繼續讀取。char delim
- istream的getline是在全局函數的getline函數的基礎上,又多了一個終止讀取的條件,即根據已讀取的字元的個數來判定,實際上是讀取n-1個字元,因為最後要為‘\0’留下一個位置。其他地方二者基本相同。
- 判斷空行的辦法是
str.length()==0
- 判斷輸入結束的辦法是
is.eof()
C++依次讀取檔案中的字元串——getline()函數的應用
轉自http://blog.csdn.net/sibo626/article/details/6781036
例如檔案test.txt中有這麼一段話:I am a boy. You are a girl.
如何一次一個的讀取單詞,即第一次讀取I,第二次讀取am,依次類推。
方法1:
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main()
{
ifstream ifs("test.txt"); // 改成你要打開的檔案
streambuf* old_buffer = cin.rdbuf(ifs.rdbuf());
string read;
while(cin >> read) // 逐詞讀取方法一
cout << read;
cin.rdbuf(old_buffer); // 修複buffer
}
方法2:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream ifs("test.txt"); // 改成你要打開的檔案
ifs.unsetf(ios_base::skipws);
char c;
while(ifs.get(c)) // 逐詞讀取方法二
{
if(c == ' ')
continue;
else
cout.put(c);
}
}
方法3:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream ifs("test.txt"); // 改成你要打開的檔案
string read;
while(getline(ifs, read, ' ')) // 逐詞讀取方法三
{
cout << read << endl;
}
}
方法4:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream ifs("test.txt"); // 改成你要打開的檔案
char buffer[];
while(ifs.getline(buffer, , ' ')) // 逐詞讀取方法四
{
cout << buffer;
}
}