2016-04-29 52 views
-2
struct node 
{ 
string info; 
struct node *next; 
}*start, *last; 

long nodecount=0; 
class teditor 
{ 
public: 
    node* create_node(string); 
    void insert_pos(); 
    void save(); 
    void display(); 
    void delete_pos(); 
    teditor() 
    { 
     start = NULL; 
    } 
}; 
node *teditor::create_node(string value) 
{ 
struct node *temp, *s; 
temp = new(struct node); 
if (temp == NULL) 
{ 
    cout<<"Memory not allocated "<<endl; 
    return 0; 
} 
else 
{ 
    temp->info = value; 
    temp->next = NULL;  
    return temp; 
} 
} 
void teditor::save() 
{ 
struct node *info; 
ofstream listfile; 
listfile.open("example.txt",ios::out|ios::app |ios::binary) ; 
node *temp; 
temp=start; 
if(!listfile){ 
cout<<"\nError"; 
} 
else{ 
while(temp!=NULL) 
{ 
    listfile.write((char*)(temp),sizeof(nodecount)); 
    temp=temp->next; 
} 
} 
listfile.close(); 
cout<<"\n\n\n\t\tLink list has been saved in file example.txt in current folder."; 
cout<<"\n\n\t\tPress a key to continue ... ";getch(); 
} 
void teditor::insert_pos() 
{ 
string value; int counter; 
int pos; 
cout<<"Enter the value to be inserted: "; 
cin>>value; 
struct node *temp, *s, *ptr; 
temp = create_node(value); 
cout<<"Enter the postion at which node to be inserted: "; 
cin>>pos; 
nodecount++; 
int i; 
s = start; 
while (s != NULL) 
{ 
    s = s->next; counter++; 
} 
if (pos == 1) 
{ 
    if (start == NULL) 
    { 
     start = temp; 
     start->next = NULL; 
    } 
    else 
    { 
     ptr = start; 
     start = temp; 
     start->next = ptr; 
    } 
} 
else if (pos > 1) 
{ 
    s = start; 
    for (i = 1; i < pos; i++) 
    { 
     ptr = s; 
     s = s->next; 
    } 
    ptr->next = temp; 
    temp->next = s; 
} 
else 
{ 
    cout<<"Positon out of range"<<endl; 
} 
} 

void teditor::display() 
{ 
/* 
Need to merge as a string and show to display just in one line like writing 
why cannot save health because of application saving pointers. 
*/ 
node *temp; 
temp=start; 
cout<<"\n\n\n"; 
while(temp) 
{ 
    cout<<"\t\t\t"<<temp->info; 
    temp=temp->next; 
} 
cout<<"\n\n\t\t "<<nodecount<<" records displayed ,Press a key to continue.....";getch(); 
} 
void teditor::delete_pos() 
{ 
int pos, i, counter = 0; 
if (start == NULL) 
{ 
    cout<<"List is empty"<<endl; 
    return; 
} 
cout<<"Enter the position of value to be deleted: "; 
cin>>pos; 
struct node *s, *ptr; 
s = start; 
if (pos == 1) 
{ 
    start = s->next; 
} 
else 
{ 
    while (s != NULL) 
    { 
     s = s->next; 
    } 
    if (pos > 0 && pos <= counter) 
    { 
     s = start; 
     for (i = 1;i < pos;i++) 
     { 
      ptr = s; 
      s = s->next; 
     } 
     ptr->next = s->next; 
    } 
    else 
    { 
     cout<<"Position out of range"<<endl; 
    } 
    free(s); 
}cout<<s<<" Element Deleted"<<endl;nodecount--; 
cout<<"There is left "<<nodecount<<" nodes"<<endl; 

    } 

嗨,夥計們!我有問題,而我想救我的鏈表txt.Everytime我試着和txt給了我一箇中國writing.Teacher也說我需要與字符串合併或我需要給節點字符串,該應用程序可以輕鬆地保存該字符串行。也許是因爲我試圖寫node *temp。任何人都知道我該如何解決我的問題?其他進程後,它將被複制,剪切,粘貼並替換節點。寫作鏈表txt文件(保存處理)

+0

您的'main()'在哪裏?無法重現您的問題。' –

+0

in main()'teditor sl; start = NULL;我使用switch:case,我可以很容易地調用sl.save();' –

+0

你在哪裏「啓動」你的鏈表「node」? 'start'不應該是NULL,它應該在某個地方是'= * node;' –

回答

0

變化

listfile.write((char*)(temp),sizeof(nodecount)); 

listfile << temp->info; 
+0

我試過了,但是txt仍然顯示出我寫作的樂趣。 –

0

你不想指針temp寫入文件,你想要的info那就是node內部的temp所指向。那你爲什麼要寫temp而不是寫info? YOu可以通過你的指針temp來做到這一點,對吧?

下面將做上面爲您提供:

listfile << temp->info; 
+0

但仍顯示相同的事情我是否錯誤,而我插入字符串鏈接列表。 –

+0

@BahadırSoybakış多數民衆贊成在我可以想到的唯一的事情,如果你仍然在垃圾。嘗試在問題中包含填充列表的代碼 – vu1p3n0x

+0

@bahad發佈一個[MCVE],或者您需要通過聲明_step-into_您的代碼語句來觀察您的邏輯和每個變量的值。 –

0

好吧,你有一個序列化的問題。你想要文件中的文本。但是你只是簡單地將內存轉儲到文件中。

listfile.write((char*)(temp),sizeof(nodecount)); 

只是寫入節點的原始內存。

問問自己 - 文本文件應該是什麼樣子?你期望它在編輯器中看起來如何。你必須編寫代碼來做到這一點。

你需要做的

listfile << temp->info 

要救下,並事先怎麼辦。也許它在排序中是隱含的。這就是你需要的一切。也許你需要行號答說next=4, prior=14

+0

[鏈接](http://stackoverflow.com/questions/523872/how-do-you-serialize-an-object-in-c)顯示序列化。我想如你所說,我需要定義一些與之相關的變量。@ pm100 –

-2

您的問題將做這些步驟後,可以解決:

  1. 項目名稱點擊右鍵,進入屬性
  2. 一般 - >項目默認設置 - >字符集
  3. 選擇未設置