[英]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.