2016-11-30 104 views
0

无法使用strcpy正确地交换char数组。我使用了strncpy,memcpy,但仍然没有得到正确的结果。使用strcpy时从'char'到'const char *'的转换无效

这是我的程序的外观。

class Carte 
{ 
protected: 
    char Denumire[50]; 
    char Autor[50]; 
    char Editura[50]; 
    int AnPublicare[50]; 
public: 
    void Citire(int n) 
    { 
     for(int i=0;i<n;i++) 
     { 
      cout<<"Denumire: "; cin>>Denumire[i]; cout<<endl; 
      cout<<"Autor: "; cin>>Autor[i]; cout<<endl; 
      cout<<"Editura: "; cin>>Editura[i]; cout<<endl; 
      cout<<"An Publicare: "; cin>>AnPublicare[i]; cout<<endl; 
     } 
    } 

    void Afisare(int n) 
{ 
    for(int i=0;i<n;i++) 
    { 
     cout<<"Denumire: "<<Denumire[i]<<endl; 
     cout<<"Autor: "<<Autor[i]<<endl; 
     cout<<"Editura: "<<Editura[i]<<endl; 
     cout<<"An Publicare: "<<AnPublicare[i]<<endl<<endl; 
    } 
} 

问题出在哪里。

void Sortare(int n) 
{ 
    int ok,aux; 
    char *auxDen , *auxAt, *auxEd; 
    do{ 
     ok=1; 
     for(int i=0;i<n-1;i++) 
      if(AnPublicare[i]>AnPublicare[i+1]) 
      { 
       ok=0; 
       aux=AnPublicare[i]; 
       AnPublicare[i]=AnPublicare[i+1]; 
       AnPublicare[i+1]=aux; 

       strcpy(auxDen,Denumire[i]); 
       strcpy(Denumire[i],Denumire[i+1]); 
       strcpy(Denumire[i+1],auxDen); 

       strcpy(auxAt,Autor[i]); 
       strcpy(Autor[i],Autor[i+1]); 
       strcpy(Autor[i+1],auxAt); 

       strcpy(auxEd,Editura[i]); 
       strcpy(Editura[i],Editura[i+1]); 
       strcpy(Editura[i+1],auxEd); 
      } 
    }while(ok!=1); 
} 
}; 

如何使它工作?

+2

'Denumire [i]'是'char'。你需要'&Denumire [i]'。 –

+0

它不起作用。编译器崩溃。 –

+0

我怀疑编译器崩溃了,请发布更新后的代码,并且过去现在得到的确切错误 – pm100

回答

1

在C数组中的char是单个字符串,所以首先你的数据类型是错误的。你最好使用std::string这就像一个字符串对象:

class Carte 
{ 
protected: 
    std::string Denumire[50]; 
    std::string Autor[50]; 
    std::string Editura[50]; 
    int AnPublicare[50]; 

然后移动它们对子级是相同int

std::string tmp; 
tmp = Denumire[i]; 
Denumire[i] = Denumire[i+1]; 
Denumire[i+1] = tmp; 

甚至更​​好:

std::swap(Denumire[i], Denumire[i+1]); 

,如果你仅限于C类型,您必须创建一组char数组来保存50个字符串。

+0

谢谢!我一直在C编程一年半。我还是新来的C++; –

1

A char只是一个字符;你似乎把它当作完整的字符串来对待。如果可以,最好使用std::string而不是char*,因为它们更容易正确使用。

此外,我会建议你将所有元素分组到一个struct Book。这样一切都在一起,你可以使用现有的STL排序算法,这将更快。

#include <string> 
#include <vector> 
#include <algorithm> 

struct Book{ 
    std::string Denumire; 
    std::string Autor; 
    std::string Editura; 
    int AnPublicare; 
}; 

bool publisherLessThan(const Book& a, const Book& b) { 
    return a.AnPublicare < b.AnPublicare; 
} 

class Carte 
{ 
protected: 
    std::vector<Book> books; 
public: 
    void Citire(int n) 
    { 
     books.clear(); 
     for(int i=0;i<n;i++) 
     { 
      Book book 
      cout<<"Denumire: "; cin>>book.Denumire; cout<<endl; 
      cout<<"Autor: "; cin>>book.Autor; cout<<endl; 
      cout<<"Editura: "; cin>>book.Editura; cout<<endl; 
      cout<<"An Publicare: "; cin>>book.AnPublicare; cout<<endl; 
      books.push_back(book); 
     } 
    } 

    void Afisare() 
    { 
     for(const Book& book : books) 
     { 
      cout<<"Denumire: "<<book.Denumire<<endl; 
      cout<<"Autor: "<<book.Autor<<endl; 
      cout<<"Editura: "<<book.Editura<<endl; 
      cout<<"An Publicare: "<<book.AnPublicare<<endl<<endl; 
     } 
    } 

    void Sortare() { 
     std::sort(books.begin(), books.end(), publisherLessThan); 
    } 
}; 
相关问题