新手求助根据规则求字符串
#include<stdio.h>#include<string.h>
#define max 1024
char str[max];
int len;
void fun(char array_c[][3], int len)
{
int i, j, k, s, n, d, flag,temp;
char *p1, *p2, *p3;
char test[max];
p1 = p2 = p3 = str;
printf("%d\n",sizeof(array_c));
for (s = 0; s < max; s++)
strans[s] = 0;
n = 0;
d=0;
flag = 0;
for (j = 0; j <= len-1; j++)
for (k = 0; k <= 2; k++)
{
strans[n++] = array_c[j][k];
i = n-1;
for (i; i-1 >=0; i--)
if(str[n-1] == str[i-1])
n--;
}
str[n] = 0;
strcpy(test,str);
while(1){
for (j = 1; j <= len-1; j++)
for (k = 0; k <= 2; k++)
for (i = 0; str[i] != 0; i++){
if(array_c[j][k] == str[i]){
switch (k){
case 0:
p1 = str+i;
break;
case 1:
p2 = str+i;
d = p1-p2;
for (d; d > 0; d--){
temp = *(str+i);
*(str+i) = *(str+i+1);
*(str+i+1) = temp;
i++;
}
p2 = str+i;
break;
case 2:
p3 = str+i;
d = p2-p3;
for (d; d > 0; d--){
temp = *(str+i);
*(str+i) = *(str+i+1);
*(str+i+1) = temp;
i++;
}
break;
default:
break;
}
}
}
if(!strcmp(test,str))
return;
else
strcpy(test,str);
}
}
int main(void)
{
char array_c[][3] = {{'t', 's', 'f'},{'a', 's', 'u'},{'m', 'a', 'f'},{'a', 'i', 'n'},{'s', 'u', 'n'},
{'m', 'f', 'u'},{'a', 't', 'h'},{'t', 'h', 'i'},{'h', 'i', 'f'},{'m', 'h', 'f'},
{'a', 'u', 'n'},{'m', 'a', 't'},{'f', 'u', 'n'},{'h', 's', 'n'},{'a', 'i', 's'},
{'m', 's', 'n'}, {'m', 's', 'u'}};
//char array_c[][3]={{'d','e','f'},{'a','b','c'},{'b','d','e'},{'c','d','f'}};
len = sizeof(array_c)/sizeof(array_c[0]);
fun(array_c, len);
printf("%s\n",str);
return 0;
}
前天看到这道题,忙活一整天用了一个简单粗暴的方法,就是搜索比较。没有非法规则的检查,如果给的数组自相矛盾这程序就死循环了。
虽然效率很低但这是我学c以来第一个独立完成的程序。
有几个疑问请教各位老师
1. 指针传递array_c数组到fun函数之后,再用sizeof(array_c)返回的是指针的长度并不是整个数组的长度?
fun中printf("%d\n",sizeof(array_c)); 返回的是4,并不是51,如果这句放在main中就返回51。如果我想在fun函数中返回整个数组的长度该怎么做?
2. str[128] = {0};是所有元素初始化为零的意思么?vs2010会智能警告,并且编译错误。
3. 这个月1号开始学的c,现在看了《C程序设计语言》第二版,下面该怎么学?