使用 strcpy 时从 'char' 到 'const char*' 的转换无效

Invalid conversion from 'char' to 'const char*' while using strcpy

无法使用 strcpy 正确交换 char 数组。我使用了 strncpy、memcpy 一切,但仍然没有得到正确的结果。

这是我的程序的样子。

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);
}
};

如何让它发挥作用?

在 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 个字符串。

一个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);
    }
};