C语言,在线等解答,明天考试

陈思有 2011-07-03 05:27:03
#include <stdio.h>
#include <string.h>
void main()
{
char (*name)[20] = {"peal","apple","strwaberll","cdfk","ndklfj"};
int i,j,k;
char *temp;

for ( i=1; i<5; i++ )
{
temp = name[i];
for ( j=i-1; j>=0; j-- );
{
if ( strcmp( temp ,name[j] ) < 1 )
strcpy( name[j+1],name[j]);
else
break;
}
strcpy( name[j+1],temp);
}

for ( i=0; i<5; i++ )
{
printf("%s\n",name[i]);
}
}




error C2078: too many initializers
...全文
175 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingshaofengbinbin 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 desdouble 的回复:]
char (*name)[20] = {"peal","apple","strwaberll","cdfk","ndklfj"};

改为:

char * name[20] = {"peal","apple","strwaberll","cdfk","ndklfj"};
[/Quote]
正解!!
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

void main()
{
//声明指针数组不能是(*name)[20],因为[]的优先级比*高,name先与[]结合,表示是一个数组,
//然后这个数组再与*结合,表示是一个指针数组
char name[][20] = {"peal","apple","strwaberll","cdfk","ndklfj"};
char (*pName)[20] = name; //定义一个行指针
int i,j, k;
char temp[20]; //这里定义成字符数组,如果是char *temp,它没有指向有大小的内存,
//就无法用于进行交换

for (i = 0; i < 5-1; i++ )
{
k = i;
for (j = i+1; j < 5; j++) //;去掉逗号
{
if (strcmp(pName[k], pName[j]) > 0 ) //不要用1,因为不一定是1
k = j;
}
if (k != i)
{
//交换需要一个中间变量
strcpy(temp, pName[k]);
strcpy(pName[k], pName[i]);
strcpy(pName[i], temp);
}
}

printf("字符串从小到大排列为: \n");
for (i = 0; i < 5; i++ )
{
printf("%s\n", pName[i]);
}
system("pause");
}



陈思有 2011-07-03
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
void main()
{
char namep[5][15]={"peal","apple","strwaber","cdfk","ndklfj"};
char (*name)[15]=namep;
int i,j;
char t[20],*temp=t;

for ( i=1; i<5; i++ )
{
temp = name+i;
for ( j=i-1; j>=0; j-- )
{
if ( strcmp( temp ,name+j ) < 0 )
strcpy( name+j+1,name+j);
else
break;
}
strcpy( name+j+1,temp);
}

for ( i=0; i<5; i++ )
{
printf("%s\n",name+i);
}
}



这是插入排序,输出的时候有些字符串被覆盖了,为什么
hedy007 2011-07-03
  • 打赏
  • 举报
回复
char (*name)[20]
name是一个指针,指向char[20]
char *name[20]
name是一个数组,20个元素,均为指向char类型的指针。
desdouble 2011-07-03
  • 打赏
  • 举报
回复
1、for ( j=i-1; j>=0; j-- );后面不应该有分号;
2、静态变量不能被写。
desdouble 2011-07-03
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
int main()
{
char name[20][128] = {"peal","apple","strwaberll","cdfk","ndklfj"};
int i,j;
char temp[128] = {0};;

for (i = 0; i < 5; i++)
{
strcpy(temp, name[i]);
for (j = i + 1; j < 5; j++)
{
if ( strcmp( name[i],name[j] ) > 0 ) {
strcpy(temp, name[i]);
strcpy(name[i], name[j]);
strcpy(name[j], temp);
}
}
}
for ( i=0; i<5; i++ )
{
printf("%s\n",name[i]);
}

return 0;
}

排序结果:
double@ubuntu:~/Desktop$ ./tt
apple
cdfk
ndklfj
peal
strwaberll
double@ubuntu:~/Desktop$

至善者善之敌 2011-07-03
  • 打赏
  • 举报
回复
char (*name)[20]
这个是数组指针
代表每个数组应该有20个元素
所以 char (*name)[20] = {"peal","apple","strwaberll","cdfk","ndklfj"};这里就有错误了

改成char *name[20]

另外下面的程序也有错,你单步调试吧
科技完美生活 2011-07-03
  • 打赏
  • 举报
回复
strcpy的地方也有问题
desdouble 2011-07-03
  • 打赏
  • 举报
回复
char (*name)[20] = {"peal","apple","strwaberll","cdfk","ndklfj"};

改为:

char * name[20] = {"peal","apple","strwaberll","cdfk","ndklfj"};

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧