指针 字符 数组 排序

t427795737 2008-10-30 09:08:45
题目是:在主函数中输入10个等长的字符串。用另一个函数对它们排序。然后在主函数输出这10个以排序的字符串:
(用指针数组和字符数组两种方法实现)

我的代码如下:报错是 temp数组的申明

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

void main()
{
void sort(char str[][10]);
char str[10][10];
int i;
for (i = 0; i < 10; i++)
scanf("%s", str[i]);
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);
sort(str);
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);
}

void sort(char str[][10])
{
int i, j, k;
char temp[10];
for (i = 0; i < 9; i++)
{
k = i;
for (j = i+1; j < 10; j++)
{
if (strcmp(str[k], str[j]) > 0)
k = j;
}
if (k != i)
{
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
...全文
70 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jacky_Dai 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 t427795737 的回复:]
不行啊,大虾:代码如下

void sort(char str[][10])
{
int i, j, k;
char temp[10];
char *pt = temp
for (i = 0; i < 9; i++)
{
k = i;
for (j = i+1; j < 10; j++)
{
if (strcmp(str[k], str[j]) > 0)
k = j;
}
if (k != i)
{
pt = a[k];
a[k] = a[i];
a[i] = pt;
}
}
}
[/Quote]
用指针的话这样就可以!
#include <stdio.h>
#include <string.h>

void sort(char str[][10]);

void main()
{
char str[10][10];
int i;

printf("----------------Before Ipt!----------------\n");
for (i = 0; i < 10; i++)
scanf("%s", str[i]);

printf("----------------Ipt Data!----------------\n");
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);

printf("----------------After sort data!----------------\n");
sort(str);
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);
}

void sort(char str[][10])
{
int i, j, k;
char temp[10];
char *pt = temp;
for (i = 0; i < 9; i++)
{
k = i;
for (j = i+1; j < 10; j++)
{
if (strcmp(str[k], str[j]) > 0)
k = j;
}
if (k != i)
{
memcpy(pt, str[k], sizeof(str[k]));
memcpy(str[k], str[i], sizeof(str[i]));
memcpy(str[i], pt, sizeof(temp));
}
}
}
leank 2008-10-30
  • 打赏
  • 举报
回复
temp = a[k]; //temp可以理解为temp[0]的地址,对地址重新赋值是不行的。看你的程序里面是只需要一个中间变量,不需要一个数组,所以定义一个“char temp;”就可以了。
Jacky_Dai 2008-10-30
  • 打赏
  • 举报
回复
我稍微修改了一下,主要问题就是你最字符数组的赋值不能像数值类型一样,
你必须同strcpy()或这memcoy(),来实现函数的拷贝,实现的方法我列出来了,
你看一下吧~
#include <stdio.h>
#include <string.h>

void sort(char str[][10]);

void main()
{
char str[10][10];
int i;

printf("----------------Before Ipt!----------------\n");
for (i = 0; i < 10; i++)
scanf("%s", str[i]);

printf("----------------Ipt Data!----------------\n");
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);

printf("----------------After sort data!----------------\n");
sort(str);
for (i = 0; i < 10; i++)
printf("%s\n", str[i]);
}

void sort(char str[][10])
{
int i, j, k;
char temp[10];
for (i = 0; i < 9; i++)
{
k = i;
for (j = i+1; j < 10; j++)
{
if (strcmp(str[k], str[j]) > 0)
k = j;
}
if (k != i)
{
memcpy(temp, str[k], sizeof(str[k]));
memcpy(str[k], str[i], sizeof(str[i]));
memcpy(str[i], temp, sizeof(temp));
//strcpy(temp, str[k]); //temp = str[k];
//strcpy(str[k], str[i]); //str[k] = str[i];
//strcpy(str[i], temp); //str[i] = temp;
}
}
}
t427795737 2008-10-30
  • 打赏
  • 举报
回复
不行啊,大虾:代码如下

void sort(char str[][10])
{
int i, j, k;
char temp[10];
char *pt = temp
for (i = 0; i < 9; i++)
{
k = i;
for (j = i+1; j < 10; j++)
{
if (strcmp(str[k], str[j]) > 0)
k = j;
}
if (k != i)
{
pt = a[k];
a[k] = a[i];
a[i] = pt;
}
}
}
Arthur_ 2008-10-30
  • 打赏
  • 举报
回复
char temp[10];
char *pt = temp;

for (i = 0; i < 9; i++)
{
k = i;
for (j = i+1; j < 10; j++)
{
if (strcmp(str[k], str[j]) > 0)
k = j;
}
if (k != i)
{
pt = a[k]; //temp是常量不能重新赋

69,373

社区成员

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

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