Cách viết một editor đơn giản bằng C++

Write a simple text editor, which stores a string of characters using the list
ADT, together with a cursor object that highlights the position of some
character in the string (or possibly the position before the first character).
Your editor should support the following operations and redisplay the cur-
rent text (that is, the list) after performing any one of them.
• left: Move cursor left one character (or nothing if at the beginning)
• right: Move cursor right one character (or do nothing if at the end)
• delete: Delete the character to the right of the cursor (or do nothing
if at the end)
• insert c: Insert the character c just after the cursor

Bạn có thử làm qua chưa ?

  • rồi : cho mọi người xem thử bạn đã làm được tới đâu rồi.
  • chưa : bạn nên thử làm đi, nếu chỗ nào k làm được, hoặc chỗ nào bị lỗi, k biết sữa. thì hãy hỏi mọi người thử xem.

nếu phải làm cả bài này cho bạn thì thật sự tốn thời gian đấy :frowning:
riêng mình là rất rất rất tốn thời gian luôn :frowning:

2 Likes

Đọc không hiểu gì luôn ::go::

So what’s your problem?

His problem is he does not know what he is talking about.

Oh yeah? Your problem is you don’t want to do it.

1 Like

Mình đang tìm lỗi :((

Sai rồi. @Huynh_Bach đọc lại đề đi. Bạn còn chưa hiểu đề yêu cầu gì.

@Huynh_Bach có compile được cái code đó chưa? Hình như bài này quá sức với bạn rồi. Code đó có phải bạn viết không?

Nếu code đó là của bạn viết thì mọi người có thể hiểu bạn đang hỏi gì.
Còn nếu code đó không phải của bạn viết thì thua luôn.

Đạt hỏi vậy là vì code này thiếu using namespace std; để có thể chạy được. Đây là một khái niệm rất căn bản để lập trình C++. Nếu bạn không nắm được cái này thì khó lòng mà làm được bài này. Và cũng khó lòng mà viết được nhiều thứ liên quan đến fstream đến vậy.

Đạt nêu ra vấn đề như vậy không phải là để chê bai @Huynh_Bach, mà để mọi người hiểu rõ vấn đề cần được giải quyết ở đây là

  • Code của @Huynh_Bach không chạy được, lỗi ở xyz, sửa như thế nào?
  • Code của who-we-dont-know không chạy được, sửa như thế nào?

Nếu rơi vào trường hợp code của người khác, mà người đó không phải là @Huynh_Bach thì việc hiểu được họ code như thế nào để sửa lỗi cho code đó là khó khả thi. Mà cũng không chắc là code đó đang làm cái bài mà @Huynh_Bach nghĩ. Nên việc tìm hiểu và sửa(nếu có) code đó là phí công vô ích của người khác.

Bạn có thể nói rõ lỗi gì không, Đạt có thể thấy là nó có lỗi cú pháp. Đã sửa lỗi cú pháp và compile được ở đây

#include <iostream>
#include <fstream>
#include <assert.h>

using namespace std;

typedef struct Node {
    char character[80];
    Node *next, *pre;
} Line;
Line *currentline;
Line *firstline;
Node *head, *tail;
int col;
void createfirstline()
{
    Node *p;
    p = new Node;
    currentline = p;
    head = currentline;
    tail = currentline;
    col = -1;
}
void newline()
{
    Node *p;
    p = new Node;
    p -> next = NULL;
    p->pre = currentline;
    currentline->next = p;
    tail = p;
    currentline=p;
    col = 0;
}
void createnewline()
{
    Node *p;
    p = new Node;
    p -> next = NULL;
    if (head == NULL) {
        head = p;
        tail = p;
    } else {
        Node *q = tail;
        q->next = p;
        p->pre = q;
    }
    tail = p;
    currentline = p;
}

int main()
{
    cout << "Enter string: ";
    char string[30];
    cin.getline (string,30);
    ifstream instream;
    instream.open(string);

    char reading;
    currentline = firstline;
    createfirstline();
    while(instream.read(&reading,sizeof(reading))) {
        if (reading == '\n')
            newline();
        else {
            col++;
            currentline->character[col] = reading;
        }
    }
    instream.close();
    return 0;
}

Trong code trên Đạt không có thấy cái gì liên quan đến list ATD cả. Mà Đạt cũng không rõ ATD là viết tắt của cái gì. Mà trong đề bài có ghi là ADT

Đó là lý do mà Đạt reply có hơi khiếm nhã

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?