繁体   English   中英

C ++字符串连接

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM