回 帖 发 新 帖 刷新版面

主题:小菜的顺序表输入时遇到的问题~

#include<iostream>
using namespace std;
#define LIST_INIT_SIZE 100
#define    LISTINCREMENT 10
typedef struct
{
    char *elem;
    int length;
    int listsize;
}sqlist;
void InitList(sqlist &l)
{
    l.length=0;
    l.listsize=LIST_INIT_SIZE;
    
}
void small_list_insert(sqlist l,int i,char e)
{
    char *q;
    q=&l.elem[i+1];
    *q=e;
    ++l.length;
}
void print_list(sqlist a)
{
    for(int i=0;i<a.length;i++)
    {
        cout<<a.elem[i];
    }
    cout<<endl;
}
int main()
{
    sqlist La;
    sqlist Lb,Lc;
    InitList(La);
    InitList(Lb);
    InitList(Lc);
    char La_head,Lb_head,Lc_head;
    char La_e,Lb_e,Lc_e;
    int a_length;int b_length;int c_length;
    cout<<"La's length is:";
    cin>>a_length;
    La.length=a_length;
    cout<<"请输入a单词"<<endl;
    cin>>La_head;
    La.elem[0]=La_head;
    for(int i=0;i<La.length-1;i++)
    {
        cin>>La_e;
        small_list_insert(La,i,La_e);
    }
    print_list(La);
    cout<<"Lb's length is:";
    cin>>b_length;
    Lb.length=b_length;
    cout<<"请输入b单词"<<endl;
    cin>>Lb_head;
    Lb.elem[0]=Lb_head;
    for(int j=0;j<Lb.length-1;j++)
    {
        cin>>Lb_e;
        small_list_insert(Lb,i,Lb_e);
    }
    print_list(Lb);
    cout<<"Lc's length is:";
    cin>>c_length;
    Lc.length=c_length;
    cout<<"请输入c单词"<<endl;
    cin>>Lc_head;
    Lc.elem[0]=Lc_head;
    for(int k=0;k<Lc.length-1;k++)
    {
        cin>>Lc_e;
        small_list_insert(Lc,i,Lc_e);
    }
    print_list(Lc);
    

}
编译倒是没问题,但是输入字母的时候总是出错误终止了,不知道问题出在哪里,大虾们帮帮忙!
感激不尽[em1][em1][em1]

回复列表 (共3个回复)

沙发

大虾们帮帮忙啊!
要是这段执行不了的话后面的程序没法写啦~~~~~

板凳

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct
{
  char* elem;
  int length;
  int listsize;
}sqlist;

void InitList(sqlist& l)
{
  l.elem = (char*)malloc(LIST_INIT_SIZE); // allocate space
  l.length = 0;
  l.listsize = LIST_INIT_SIZE;
    
}

void PushBack(sqlist& l, char e)
{
  if(l.listsize < l.length + 1) // not enough space?
  {
    // reallocate space to hold more
    l.elem = (char*)realloc(l.elem, l.listsize + LISTINCREMENT);
    if(!l.elem) // failed?
    {
      cerr << "memory exhausted!\n";
      exit(1);
    }
    l.listsize += LISTINCREMENT;
  }
  l.elem[l.length++] = e;
}

void PrintList(const sqlist& a)
{
  for(int i = 0; i < a.length; ++i)
    cout << a.elem[i];
  cout << endl;
}

inline void DestroyList(sqlist& l)
{
  l.length = l.listsize = 0;
  free(l.elem);
  l.elem = 0;
}

int main()
{
  sqlist La, Lb, Lc;
  const int SZ = 1 << 10; // less than 1024 characters for a string
  char word[SZ];

  InitList(La);
  cout << "input a word for a:" << endl;
  cin >> word;
  // you may think 'strcpy', OK, but 'PushBack' function must be changed accordingly
  for(int i = 0; i < strlen(word); ++i)
    PushBack(La, word[i]);
  cout << "the 1st string is:\n";
  PrintList(La);
  DestroyList(La);
  InitList(Lb); 
  cout << "input a word for b:" << endl;
  cin >> word;
  for(int i = 0; i < strlen(word); ++i)
    PushBack(Lb, word[i]);
  cout << "the 2nd string is:\n";
  PrintList(Lb);
  DestroyList(Lb);
  
  // the left for Lc is almost the same
}
PS: 你的程序跟VC没有关系,建议下次有问题发到C/C++论坛上

3 楼

好!
感谢大虾!!!
[em1][em1][em1]

我来回复

您尚未登录,请登录后再回复。点此登录或注册