首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++字符串级联

C++字符串级联
EN

Stack Overflow用户
提问于 2015-11-01 02:22:32
回答 3查看 225关注 0票数 0

我做练习6在第二章从书思维在C++,第二版,第1卷c 2000年由布鲁斯埃克尔。

原始问题:

更改Fillvector.cpp,以便在打印出来之前将向量中的所有元素连接到一个字符串中,但不要尝试添加行号。

Fillvector.cpp文件可在http://www.BruceEckel.com上使用。

下面的代码是我为解决这个问题而编写的:

代码语言:javascript
复制
// 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++) {

结果不是我想的那样。我认为输出必须如下:

代码语言:javascript
复制
// 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+=/上读到了有关字符串级联操作符的信息,但仍然不知道输出为什么出错。请给我解释一下这个输出。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2015-11-01 02:38:54

您已经正确地完成了该操作,但是您打开了"FillVector.cpp“文件。要获得所需的输出,必须打开源代码的文件。因此,如果您将程序代码命名为"a.cpp“,则应该打开"a.cpp”,将源代码连接到一行中。

此外,在第14行中,您使用string::size_type对向量进行迭代。应该是vector<string>::size_type。也就是说,一个简单的size_t也可以。

还有,别忘了缩进。(第13和15行)

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-11-01 07:41:18

您正在windows上运行,您的输出是:

代码语言:javascript
复制
// Fillvector.cpp\r#include <string>\r#include <fstream>\r#include <iostream>

这看起来比实际错误得多,因为\r将光标移动到行的开头。

票数 1
EN

Stack Overflow用户

发布于 2015-11-01 02:37:00

您的代码在我看来正常工作(在我将:更改为;之后,正如我在编辑中所指出的那样)。我得到了你想要的结果:

代码语言:javascript
复制
$ 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;}$ 

下面是您具有更好缩进的代码:

代码语言:javascript
复制
#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上产生合理的输出,则需要在每个字符串之间强制一个换行符。试试这个:

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33458604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档