我一直在尝试将来自以下函数的置换字符串存储到数组中。我收到以下错误,
Error 2 error C2106: '=' : left operand must be l-value
我希望能够存储所有置换字符串并逐个检索它们。
#include<stdio.h>
#include<string.h>
const char cstr[100][100];
char* permute(const char *a, int i, int n)
{
int j;
if (i == n)
{
cstr [k] =a;
k++;
}
else
{
for (j = i; j <= n; j++)
{
swap((a + i), (a + j));
permute(a, i + 1, n);
swap((a + i), (a + j)); //backtrack
}
}
return cstr;
}
int main ()
{
char str1 [100];
printf ( "enter a string\n" );
scanf( "%d" , &str );
permute ( str1 , 0 , n-1 );
//can't decide what parameter to consider to terminate the loop
printf( "%s" , cstr[i] ); /*then print the strings returned from permute
function*/
return 0;
}
答案 0 :(得分:0)
cstr[k] = a;
是您的错误所在。
cstr [k]是char [100],但a是char *。这些根本不同,不能相互分配。您想改为strcpy(cstr[k], a)
(或memcpy
)。
cstrk [k]指的是大小为100的字符数组,并且数组不能直接在C中赋值,因此它不是l值表达式。
答案 1 :(得分:0)
以下是完全有效的计划
#include <stdio.h>
#include <string.h>
char cstr[100][100];
int k;
/* Function to swap values at two pointers */
void swap (char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
/* End of swap() */
/* Function to print permutations of string */
char permute(char *a, int i, int n)
{
int j;
if (i == n)
{
strcpy(cstr[k],a);
k++;
// printf("%s\n", a);
}
else {
for (j = i; j <= n; j++)
{
swap((a + i), (a + j));
permute(a, i + 1, n);
swap((a + i), (a + j)); //backtrack
}
}
return cstr;
}
/* The main() begins */
int main()
{
char a[20];
int n,x,i;
printf("Enter a string: ");
scanf("%s", a);
n = strlen(a);
printf("Permutaions:\n");
permute(a, 0, n - 1);
for(i=0;i<k;i++)
printf("%s\n",cstr[i]);
getchar();
scanf("%d",&x);
return 0;
}