簡體   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