C++ primer memiliki deskripsi dan contoh berikut (hal. 110):

assume we have a vector<string> named text that holds the
data from a text file. Each element in the vector is either a sentence or an empty
string representing a paragraph break. If we want to print the contents of the first
paragraph from text, we’d write a loop that iterates through text until we
encounter an element that is empty:

for (auto it = text.cbegin(); it != text.cend() && !it->empty(); ++it)
        cout << *it << endl;

Yang tidak saya mengerti adalah bagaimana karakter baris baru \n dapat ditafsirkan sebagai vektor kosong saat membaca dari file teks atau bahkan input pengguna?

Saya mengatur loop untuk membaca input ke dalam vektor sebagai berikut, yang merupakan metode yang dijelaskan dalam buku:

vector<string> text;
    string s;
    while (cin >> s)
        text.push_back(s);

Menerima input dengan cara ini menghapus spasi termasuk baris baru bukan? Bagaimana saya menafsirkan baris baru dan menyimpannya sebagai vektor kosong? Mengapa buku ini menggambarkannya dengan cara ini?

Buku ini menjelaskan arahan ulang input di halaman sebelumnya dengan melakukan hal berikut di CMD di Windows:

cd [PROJECT LOCATION]
PROJECT.EXE <input.txt>output.txt

Di atas adalah bagaimana saya akan membaca input dari file ke dalam program saya.

c++
-2
Spellbinder2050 25 Mei 2021, 18:53

1 menjawab

Jawaban Terbaik

Anda memerlukan getline() jika Anda ingin mempertahankan spasi putih:

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> text;
    std::string s;
    while (std::getline(std::cin, s))
    {        
        text.push_back(s);
    }

    // output first paragraph
    for (auto it = text.begin(); it != text.end() && !it->empty(); ++it)
        std::cout << *it << std::endl;
}

Masukan di Konsol:

Paragraph 1
does not stop yet
but stops now

Enter, menyimpan baris kosong, yang nantinya akan menyebabkan !it->empty() gagal dan dengan demikian loop output berhenti.

Paragraph 2
will not be output

Ctrl+Z, menjadi karakter EOF (end of file) diikuti oleh Enter, kombinasi keduanya akan menyebabkan getline() berakhir.

1
Thomas Weller 25 Mei 2021, 18:39