将数字文件转成链表

有一个文件里面都是一行一行的数字,用空格分开,请把它每行转化成一个链表。

注意getline(ifstream, line)得到一行,而且使用了头结点。

https://gist.github.com/Jiacai/9431341

#include <string>

#include <fstream>

#include <iostream>

using namespace std;



struct ListNode {

    int val;

    ListNode *next;

    ListNode(int _val) {

        val = _val;

        next = NULL;

    }

};



/*

    123 456

*/

void readFile(string fileName, ListNode** list, int lineLimit) {

    ifstream ifstrm(fileName);

    if(!ifstrm) {

        exit(1);

    }

    int i = 0;

    string line;

    while (getline(ifstrm, line) && i < lineLimit) {

        // parse this line

        ListNode* dummy = new ListNode(0);

        ListNode *last = dummy;

        int idx = 0;

        while (idx < line.length()) {

            // skip spaces

            while (idx < line.length() && line[idx] == ' ') {

                idx++;

            }

            if (idx == line.length()) break;

            int num = 0;

            while (idx < line.length() && line[idx] != ' ') {

                num = num * 10 + line[idx] - '0';

                idx++;

            }

            ListNode* node = new ListNode(num);

            last->next = node;

            last = node;

        }

        last->next = NULL;

        list[i] = dummy->next;

        delete dummy;

        i++;

    }

    ifstrm.close();

}



int main() {

    const int LINE_COUNT = 100;

    ListNode* list[LINE_COUNT];

    memset(list, 0, sizeof(list));

    readFile("d:\\test.txt", list, LINE_COUNT);

    for (int i = 0; i < LINE_COUNT; i++) {

        ListNode* current = list[i];

        if (current == NULL) break;

        while (current != NULL) {

            cout << current->val << "->";

            current = current->next;

        }

        cout << "NULL" << endl;

    }

    system("pause");

}

 

第二次写,数组里保存头结点:

#include <string>

#include <fstream>

#include <iostream>

using namespace std;



struct Node

{

	int val;

	Node *next;

};



void readFile(string fileName, Node** lineHead, int lenLimit)

{

	fstream f(fileName);

	if (!f) {

		exit(1);

	}

	string line;

	int lineIdx = 0;

	while (getline(f, line) && lineIdx < lenLimit)

	{

		lineHead[lineIdx] = new Node();

		Node * current = lineHead[lineIdx];

		// skip spaces at first

		int i = 0;



		while (i != line.length())

		{

			while (i < line.length() && line[i] == ' ')

			{

				i++;

			}



			if (i == line.length()) continue;



			int num = 0;

			// get a number

			while (i != line.length() && line[i] != ' ')

			{

				num = num * 10 + (line[i] - '0');

				i++;

			}

			Node * node = new Node();

			node->val = num;

			node->next = NULL;

			current->next = node;

			current = node;

		}

		lineIdx++;

	}

	f.close();

}



int main()

{

	const int LINE_COUNT = 100;

	Node* list[LINE_COUNT];

	memset(list, 0, sizeof(list));

	readFile("d:\\test.txt", list, LINE_COUNT);

	for (int i = 0; i < LINE_COUNT; i++) {

		if (list[i] == NULL) break;

		Node* current = list[i]->next;

		if (current == NULL)

		{

			cout << "NULL" << endl;

			continue;

		}

		while (current != NULL) {

			cout << current->val << "->";

			current = current->next;

		}

		cout << "NULL" << endl;

	}

	system("pause");

	return 0;

}

  

你可能感兴趣的:(文件)