我无法获得以下功能的预期输出。
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文件中打印第1列和第4列内容。像下面的一些事情
-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;
答案 0 :(得分:5)
使用>>
进行流输入时,您应该使用
entireLine >> p1 >> p2 >> p3 >> p4 >> p5 ;
因为空格(' '
,\t
和\n
)会被忽略。
<强>更新强>
为什么&#34; -rw-r-r-- 1空气人员StructEx.cpp&#34;使用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
只需阅读taff
至p3
6)entireLine >> s
跳过该空格,S
(StructEx.cpp
的开头)转到s
7)entireLine >> p4
最终我们有p4
的价值,这是tructEx.cpp
,因为S
是在步骤6)到s
更新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;
}
给出
但是
#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;
}
产生
最终更新
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;
}
}