[英]C++ string concatenation
我從Bruce Eckel撰寫的《 Thinking In C ++,第二版,第二卷,第1卷©2000》的第2章中練習6。
原始問題:
更改Fillvector.cpp,以便在打印出來之前將向量中的所有元素連接到單個字符串中,但不要嘗試添加行號。
文件Fillvector.cpp可從http://www.BruceEckel.com獲得 。
以下代碼是我為解決該問題而編寫的:
// Fillvector.cpp
#include <string>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<string> v;
ifstream in("Fillvector.cpp");
string line, ss;
while (getline(in, line)) {
v.push_back(line);
}
for (vector<string>::size_type i = 0; i < v.size(); i++) {
ss += v[i];
}
cout << ss;
return 0;
}
代碼成功編譯,我得到了產生的結果:
} return 0; s; [i]; ing> :: size_type i = 0; 我<v.size(); i ++){
輸出不是我想的那樣。 我認為輸出必須如下:
// Fillvector.cpp#include <string>#include <fstream>#include <iostream>#include <vector>using namespace std:int main() {vector<string> v;ifstream in("Fillvector.cpp");string line, ss;while(getline(in, line))v.push_back(line);for(string::size_type i = 0; i < v.size(); i++)ss += v[i];cout << ss;return 0;}
我在http://www.cplusplus.com/reference/string/string/operator+=/上閱讀了有關字符串連接運算符的信息,但仍然不知道為什么輸出錯誤。 請為我解釋此輸出。 任何幫助將非常感激。
您已正確完成操作,但是打開了文件“ FillVector.cpp”。 要獲得所需的輸出,您必須打開源代碼的文件。 因此,如果您將程序代碼命名為“ a.cpp”,則應打開“ a.cpp”以將源代碼連接成一行。
同樣,在第14行,您使用string::size_type
遍歷向量。 它應該是vector<string>::size_type
。 也就是說,簡單的size_t
也可以。
另外,不要忘記縮進。 (第13和15行)
希望這可以幫助。
您正在Windows上運行,輸出為:-
// Fillvector.cpp\r#include <string>\r#include <fstream>\r#include <iostream>
由於\\ r將光標移至該行的開頭,因此看起來比實際的錯誤得多。
您的代碼對我來說正常工作(如我在編輯中指示的那樣,一旦將:
更改為;
,我得到了您想要的結果:
$ g++ FillVector.cpp
$ ./a.out
#include <string>#include <fstream>#include <iostream>#include <vector>using namespace std;int main() { vector<string> v; ifstream in("Fillvector.cpp"); string line, ss; while(getline(in, line)) { v.push_back(line); } for(string::size_type i = 0; i < v.size(); i++) { ss += v[i]; } cout << ss; return 0;}$
這是縮進更好的代碼:
#include <string>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<string> v;
ifstream in("Fillvector.cpp");
string line, ss;
while(getline(in, line)) {
v.push_back(line);
}
for(string::size_type i = 0; i < v.size(); i++) {
ss += v[i];
}
cout << ss;
return 0;
}
但是,如果您希望代碼在Windows上產生明智的輸出,則需要在每個字符串之間強制換行。 嘗試這個:
#include <string>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<string> v;
ifstream in("Fillvector.cpp");
string line, ss;
while(getline(in, line)) {
v.push_back(line);
}
for(string::size_type i = 0; i < v.size(); i++) {
ss += v[i] + std::string("\n"); // Add a \n for windows!
}
cout << ss;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.