字符串的排列

时间:2016-10-18 17:55:02

标签: c string permutation

我正在尝试实现一个代码,我必须置换一个字符串。无论何时我尝试执行我的代码,我都会收到以下错误和警告;

  

1.通过permute的参数1从没有强制转换的指针生成整数

     

2.expected char但参数的类型为char *

     

3.置换冲突的类型

什么可能导致我的程序中的错误?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void swap(char *first,char *second);
void permute(char a,int l,int r);

int main(){
   char str[] = "ABC";
   int size = strlen(str);
   permute(str,0,size-1);
   return 0;
}
void permute(char *a,int l,int r){
   if (l==r){
       printf("%s\n",a);
   }else{
       int i;
       for(i=l;i<=r;i++){
           swap((a+l),(a+i));
           permute(a,l+1,r);
           swap((a+l),(a+i));
       }
   }

}
void swap(char *first,char *second){
    char *temp;
    *temp = *first;
    *first = *second;
    *second = *temp;
}

2 个答案:

答案 0 :(得分:3)

您的功能原型出现错误。它的声明如下:

void permute(char a,int l,int r);

但定义如下:

void permute(char *a,int l,int r) {

请注意,第一个参数的类型不匹配。您需要更改原型以匹配定义。

与此无关,您的swap函数正在使用未被设置而被解除引用的指针temp。这是未定义的行为,可能会导致核心转储。

由于您在此处交换字符,因此您只需要char,而不是char *

void swap(char *first,char *second){
    char temp;
    temp = *first;
    *first = *second;
    *second = temp;
}

答案 1 :(得分:0)

您的错误是您的数据类型是函数permute的char,您希望它是一个数组。您想使用参数char * a []。置换应该是

void permute(char *a[], int l, int r)