我做练习6在第二章从书思维在C++,第二版,第1卷c 2000年由布鲁斯埃克尔。
原始问题:
更改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;
}代码编译成功,我得到了生成的结果:
}返回0;s;i;ing>::size_type i= 0;i< 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+=/上读到了有关字符串级联操作符的信息,但仍然不知道输出为什么出错。请给我解释一下这个输出。任何帮助都将不胜感激。
发布于 2015-11-01 02:38:54
您已经正确地完成了该操作,但是您打开了"FillVector.cpp“文件。要获得所需的输出,必须打开源代码的文件。因此,如果您将程序代码命名为"a.cpp“,则应该打开"a.cpp”,将源代码连接到一行中。
此外,在第14行中,您使用string::size_type对向量进行迭代。应该是vector<string>::size_type。也就是说,一个简单的size_t也可以。
还有,别忘了缩进。(第13和15行)
希望这能有所帮助。
发布于 2015-11-01 07:41:18
您正在windows上运行,您的输出是:
// Fillvector.cpp\r#include <string>\r#include <fstream>\r#include <iostream>这看起来比实际错误得多,因为\r将光标移动到行的开头。
发布于 2015-11-01 02:37:00
您的代码在我看来正常工作(在我将:更改为;之后,正如我在编辑中所指出的那样)。我得到了你想要的结果:
$ 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;
}https://stackoverflow.com/questions/33458604
复制相似问题