使用编译时错误

时间:2015-06-06 19:24:58

标签: c++ sorting

请帮我找出给定编译错误的原因。如果您认为有问题,请向我推荐,因为我是编程新手。

编译错误:

[Error] request for member 'size' in 'a', which is of non-class type 'char [10]'
[Error] request for member 'size' in 'b', which is of non-class type 'char [10]'

我的代码是:

#include<iostream>
#include<string>

using namespace std;

int m,n;

void swap(int* p,int* q)//swap
{
    int temp = *p;
    *p=*q;
    *q=temp;
}

int partition(char a[],int l,int h)//partition
{
    int pivot=a[h];
    int index=l;
    for(int i=l;i++;i<h)
    {
        if(a[i]<pivot)
        {
            swap(a[i],a[index]);
            index++;
        }
    }
    swap(a[h],a[index]);
    return(index);
}

void quick_sort(char a[],int l,int h)//sorting
{
    while(l<h)
    {
      int p_index;
      p_index=partition(a,l,h);
      quick_sort(a,p_index + 1,h);
      quick_sort(a,l,p_index - 1);
   }
}


void anargram(char a[],char b[])
{

    quick_sort(a,0,m);
    quick_sort(b,0,n);

    if(m==n)
    {
        for(int k=0;k<m;k++)
        {
            if(a[k]!=b[k])
            {
                cout<<"NO\n";
            }

        }
        cout<<"YES\n";
    }
    else
    {
        cout<<"NO\n";;
    }
}

int main()
{
    cout<<"enter the strings";
    char a[10],b[10];

        cin>>a;
        cin>>b;

    m = strlen(a);
    n= strlen(b);
    anargram(a,b);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

C样式数组不提供任何成员函数,因为它们是基本类型(因此编译器错误)。

对于这样的数组,您可以使用sizeof(a)来确定它在其声明的相同范围内的实际大小。 一旦它decayed to a pointer,你无法确定它的实际大小。

由于你的很可能用来表示C风格的NUL终止字符串,你可能想要从输入中使用它们的实际大小,你也可以使用

char a[10],b[10];

cin>>a;
cin>>b;

m = strlen(a);
n= strlen(b);

我建议使用

std::string a(10,0),b(10,0); 

代替。