为什么这段代码在strcpy中给出错误不匹配

时间:2015-09-25 14:56:05

标签: c++

strcpy()函数中存在不匹配错误。我是C ++语言的新手。

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

#define max 5

class ss {
private:
    char str[max][10];
public:
    void  get_str() {
        for (int i = 0; i < max; i++)
            cin >> str[i];
    }
    void disp() {
        cout << "Entered strings are\n";
        for (int i = 0; i < max; i++) {
            if (strcmp(str[i], str[i + 1]) != 0)
                cout << str[i] << endl;
        }
    }
    /*
    void sort()
    {
        char temp[max];

        for (int i = 0; i < max - 1; i++)
            for (int j = 0; j < (max - i - 1); j++)
            {
                if (strcmp(str[j], str[j + 1])>0)
                {
                    strcpy(temp, str[j]);
                    strcpy(str[j], str[j + 1]);
                    strcpy(str[j + 1], temp);
                }
            }
        disp();
    }
    */
    void qsort()
    {
        qs(str, 0, max - 1);
        disp();
    }
    void qs(char *&str, int st, int e)
    {
        int pi = part(str, st, e);
        qs(s, st, pi - 1);
        qs(s, pi + 1, e);
    }
    int part(char *&s, int st, int e)
    {
        char pi[max], swap[max];
        strcpy(pi, s[e]);
        int pii = st;
        int i = st;
        for (i; i < e; i++) {
            if ((strcmp(s[i], s[pii])) <= 0)
            {
                strcpy(swap, s[pii]);
                strcpy(s[pii], s[i]);
                strcpy(s[i], swap);
                pii++;
            }
        }
        strcpy(swap, str[e]);
        strcpy(str[e], str[pii]);
        strcpy(str[pii], swap);
    }
};

main()
{
    ss s;
    cout << "Enter the strings\n";
    s.get_str();
    s.disp();
    s.sort();
    cout << "after the sort" << endl;
    s.disp();
}

1 个答案:

答案 0 :(得分:0)

我发现您的代码有几个问题:

  1. 参数以qs()传递给part()char *&,而不是char **char [max][10]
  2. {li> sqs()中未定义(您的意思是str吗?)。
  3. ISO C ++禁止main()没有返回值的定义。
  4. part()具有非void返回类型,并且不返回值。
  5. 修复后的代码如下所示:

    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    #define max 5
    class ss {
        private:
            char str[max][10];
        public:
            void  get_str() {
                for (int i = 0; i < max; i++)
                    cin >> str[i];
            }
            void disp() {
                cout << "Entered strings are\n";
            for (int i = 0; i < max; i++) {
                if (strcmp(str[i], str[i + 1]) != 0)
                    cout << str[i] << endl;
            }
        }
    
        void sort()
        {
            char temp[max];
    
            for (int i = 0; i < max - 1; i++)
                for (int j = 0; j < (max - i - 1); j++)
                {
                    if (strcmp(str[j], str[j + 1])>0)
                    {
                        strcpy(temp, str[j]);
                        strcpy(str[j], str[j + 1]);
                        strcpy(str[j + 1], temp);
                    }
                }
            disp();
        }
    
        void qsort()
        {
            qs(reinterpret_cast<char **>(str), 0, max - 1);
            disp();
        }
    
        void qs(char **str, int st, int e)
        {
            int pi = part(reinterpret_cast<char **>(str), st, e);
            qs(str, st, pi - 1);
            qs(str, pi + 1, e);
        }
    
        int part(char **s, int st, int e)
        {
            char pi[max], swap[max];
            strcpy(pi, s[e]);
            int pii = st;
            int i = st;
            for (; i < e; i++) {
                if ((strcmp(s[i], s[pii])) <= 0)
                {
                    strcpy(swap, s[pii]);
                    strcpy(s[pii], s[i]);
                    strcpy(s[i], swap);
                    pii++;
                }
            }
            strcpy(swap, str[e]);
            strcpy(str[e], str[pii]);
            strcpy(str[pii], swap);
            // NO RETURN VALUE?
            return 0;
        }
    };
    
    int main()
    {
        ss s;
        cout << "Enter the strings\n";
        s.get_str();
        s.disp();
        s.sort();
        cout << "after the sort" << endl;
        s.disp();
        return 0;
    }
    

    或者,如果您不想使用reinterpret_cast<>(),可以使用:

    ...
    void qsort()
    {
        qs(str, 0, max - 1);
        disp();
    }
    
    void qs(char str[max][10], int st, int e)
    {
        int pi = part(str, st, e);
        qs(str, st, pi - 1);
        qs(str, pi + 1, e);
    }
    
    int part(char s[max][10], int st, int e)
    ...