Saya tahu pertanyaan ini telah ditanyakan sebelumnya di sini, tetapi saya tidak dapat menemukan apa pun yang benar-benar membantu saya memahami masalahnya.

Saya memiliki teks yang diisi yang disebut input.txt, yang isinya terlihat seperti:

4 4
1.0 2.0 3.0 4.0
5.0 6.0 7.0 8.0
9.0 10.0 11.0 12.0
13.0 14.0 15.0 16.0

Dimana baris pertama menentukan dimensi array 2D.

Jadi menggunakan fstream Saya telah menemukan cara menarik string dari file baris demi baris, tetapi masalah saya adalah menarik data individual keluar. Saya sudah mencoba menggunakan substr dan menemukan bahwa itu menjadi sakit kepala nyata ketika Anda berurusan dengan ganda yang mungkin memiliki jumlah tempat desimal yang bervariasi.

Demikian pula, karena ini untuk kursus pemrograman pengantar, vektor tidak diizinkan yang biasanya saya gunakan untuk hal seperti itu (sebenarnya alasan saya harus mengulang tugas).

Jadi menggunakan array gaya-C, bagaimana saya harus menarik info ini dari input.txt?

Kode saya untuk menarik dari baris pertama:

int m, n;
if (inputFile.good()) {
    std::string line;
    std::getline(inputFile, line);

    std::string sizeX = line.substr(0, 1);
    std::string sizeY = line.substr(2, 1);

    m = stoi(sizeX);
    n = stoi(sizeY);
}

Tetapi juga ini tidak akan berfungsi jika dimensi array lebih besar dari 9.

Jadi bagaimana saya bisa meningkatkan kedua metode pertama saya, dan kemudian menarik sisa data ke dalam array gaya-C untuk manipulasi di memori.

Selain itu, metode berbasis token yang pernah saya lihat, seperti:

int a, b;
while (infile >> a >> b)
{
    // process pair (a,b)
}

Tidak menjelaskan bagaimana Anda bisa melakukan ini untuk sejumlah variabel elemen per baris.

Terima kasih sebelumnya

0
user12322544 19 April 2020, 20:49

1 menjawab

Jawaban Terbaik

Cukup gunakan >> dalam satu lingkaran. Ini akan membuat hidup jauh lebih kompleks jika Anda ingin membaca satu baris sekaligus, menggunakan >> akan melewatkan semua spasi termasuk spasi dan baris baru.

ifstream infile("input.txt");
int size;
infile >> size;
double **arr = ... // allocate array based on size
for (int i = 0; i < size; ++i)
    for (int j = 0; j < size; ++j)
        infile >> arr[i][j];

Saya berasumsi Anda tahu cara mengalokasikan array gaya C. Dan saya juga tidak melakukan pengecekan kesalahan yang mana dalam program nyata yang harus Anda sertakan. Tapi mudah-mudahan saya telah mengilustrasikan cara membaca nilai ke dalam array.

0
john 19 April 2020, 17:55