问题描述:
#include <stdio.h>
#include <string.h>
#define MAXNUM 100
#define MAXLEN 20
main()
{
char s1[MAXNUM][MAXLEN],max[MAXLEN]
int num=1,i,j,exchange
for (i=0i<num(i++,num++))
{printf("请输入第%d个国家名字:\n",i+1)
gets(s1[i])
if(s1[i][0]==32) break
}
strcpy(max,s1)
puts(max)
for (i=0i<num-1i++)这里开始就是冒泡排序,但我想把字符串排序,但赋值这里不知道怎么错了,麻烦大家看下,给点提示就可以了,谢谢!
{
exchange=0
for(j=num-2j>ij--)
if (strcmp(s1[i],s1[i+1])>0)
{
strcpy(max,s1[j+1])
strcpy(s1[j+1],s1[j])
strcpy(s1[j],max)
exchange=1
}
if(!exchange)
return
}
printf("按大小输出国家名字:")
for (i=0i<numi++)
printf("%s\n",s1[i])
}
解析:
/*字符串冒泡排序,以输入的字符串为空格为结束*/
#include <stdio.h>
#include <string.h>
#define MAXNUM 5
#define MAXLEN 20
main()
{
char s1[MAXNUM][MAXLEN],max[MAXLEN]
int num=1,i,j,exchange
for (i=0i<num(i++,num++))
{
printf("请输入第%d个国家名字:\n",i+1)
gets(s1[i])
if(s1[i][0]==32) break
}
strcpy(max,s1[0])
puts(max)
for (i=0i<num-2i++)/*这里开始就是冒泡排序 */
{
exchange=0
for(j=0j<num-2j++)
if (strcmp(s1[j],s1[j+1])>0)
{
strcpy(max,s1[j])
strcpy(s1[j],s1[j+1])
strcpy(s1[j+1],max)
exchange=1
}
if(!exchange)
break
}
printf("按大小输出国家名字:")
for (i=0i<num-1i++)
printf("%s\n",s1[i])
getch()
}
退出循环应用break而不能用return
冒泡2次循环都应该从头到尾,或者从尾到头,不能一正一反
#include<stdio.h>
#include<string.h>
int main()
{
int j,k,i,t,n
char s[10][10],b[10][10]
for(i=0i<10i++)
{
scanf("%s",s[i])
}
n=strlen(s[1])
k=0
for(i=0i<9i++)
{
for(j=0j<9-ij++)
if(strcmp(s[j],s[j+1])>0)
{
for(k=0k<nk++)
b[j][k]=s[j][k]
for(k=0k<nk++)
s[j][k]=s[j+1][k]
for(k=0k<nk++)
s[j+1][k]=b[j][k]
}
}
for(i=0i<10i++)
{
printf("%s ",s[i])
}
return 0
}
运行效果:
扩展资料:scanf函数用法:
scanf("输入控制符",输入参数)
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。
如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。
你有两个错误,一是C的变量定义必须在所有语句之前,二是字符串不能赋值,必须使用strcpy函数,修改后的程序代码和运行结果如下:$ cat a.c
#include<stdio.h>
#include<string.h>
void Solve()
void sort(char *name[], int n)
int main()
{
Solve()
return 0
}
void Solve()
{
int i,n
char name[100][100]
scanf("%d",&n)
for(i=0i<ni++)
{
gets(name[i])
}
sort(name,n)
for(i=0i<ni++)
{
puts(name[i])
}
}
void sort(char *name[100], int n)
{
int i,j,k
char *temp
for(i=0i<n-1i++)
{
k=i
for(j=i+1j<nj++) if(strcmp(name[k],name[j])>0) k=j
if (k!=i)
{
{
strcpy(temp,name[i])
strcpy(name[i],name[k])
strcpy(name[k],temp)
}
}
}
}
$ cc a.c
"a.c", line 19: warning #2167-D: argument of type "char (*)[100]" is
incompatible with parameter of type "char **"
sort(name,n)
^
$ a.out
6dkjlfhgjkshdfjkgh
1kdfghj
3dkjfhghd
2dlkfjgklj
5ldfkhlkj
4dflkghklj
1kdfghj
3dkjfhghd
2dlkfjgklj
5ldfkhlkj
4dflkghklj
$ cc -V
cc: HP C/aC++ B3910B A.06.25 [Nov 30 2009]
/cq/u/cqjsdba/ygb>