1

すべての行をファイル内の単一の文字列に連結することを目的としたコードを記述(コピーおよび変更)しました。しかし、私は予期しない結果を得ています。

//Fillvector.cpp

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main() {
    vector<string> v;
    ifstream in("Fillvector.cpp");
    string line;
    string finalString="";
    while(getline(in, line))
    v.push_back(line);
    for(int i=0; i < (int)v.size(); i++) {
    finalString += v[i];
    }
    cout << finalString << endl;
}

私が自分の端末で得ている結果は

}nt maincout << finalString << endl;(); i++) {

どうしたの ?

4

4 に答える 4

3

あなたのendlキャラクターはCRフォローなしのただのようLFです。つまり、追加の各行出力は前の行に上書きされるため、各列に表示された最後の文字が表示されます。


よく見ると、問題はラインにあります

finalString += v[i];

どちらであるべきか

finalString += v[i] + "\n";

CRそれ以外の場合は、(改行) 文字で終わる文字列を連結しますが、 LF(改行または改行) 文字は連結しません。

于 2012-03-10T20:42:19.420 に答える
2

うーん..私のために動作します(MinGW G ++ 4.6.1、Windows):

C:\>fillvector
//Fillvector.cpp#include <string>#include <iostream>#include <fstream>#include <
vector>using namespace std;int main() {vector<string> v;ifstream in("Fillvector.
cpp");string line;string finalString;while(getline(in, line))v.push_back(line);f
or(int i=0; i < v.size(); i++) {finalString += v[i];}cout << finalString << endl
;}

C:\>

では、どのコンパイラとOSを使用していますか?

また、getline改行が削除されるため、コードを少し変更することをお勧めします。

[...]
while(getline(in, line)) {
  v.push_back(line);
  v.push_back("\n");
}
[...]

その変更後、コードはまたはと非常によく似た動作をしcat fillvector.cppますtype fillvector.cpp

于 2012-03-10T20:36:04.740 に答える
1

あなたのコードは問題ありません。

$ g++ Fillvector.cpp 
$ ./a.out 
//Fillvector.cpp#include <string>#include <iostream>#include <fstream>#include <vector>using namespace std;int main(){    vector < string > v;    ifstream in("Fillvector.cpp");    string line;    string finalString;    while (getline(in, line))        v.push_back(line);    for (int i = 0; i < v.size(); i++) {        finalString += v[i];    }    cout << finalString << endl;}
$ ./a.out  | wc -l
1

上記のログを参照してください。最後の行は行数をカウントします。とその1

于 2012-03-10T20:40:59.927 に答える
1

問題は、削除またはスペースに置き換えたいgetline() 終了改行文字が含まれていることです。同様の質問への回答の文字列を作成しようとすると、ラインシフトが発生するを参照してください。

于 2012-03-11T14:27:56.367 に答える