c语言问题,用冒泡排序法按顺序输出字符串

# include<stdio.h># include<string.h>
int main(void)
{
char str[1000][10];
char temp[100];
int i, j, n;

printf("请输入你要输入的字符串的个数:n=");

scanf("%d", &n);
printf("请输入字符串:");

for(i=0; i<n; ++i) scanf("%s", str);
for(j=0; j<n-1; ++j)
for(i=0; i<n-1-j; ++i)
if(strcmp(str[i],str[i+1])>0)
{
strcpy(temp,str[i]);
strcpy(str[i],str[i+1]);
strcpy(str[i+1],temp);
}

for(i=0;i<n;++i) printf("%s", str[i][10]);

return 0;}
哪里有问题呢

#include<stdio.h>
#include<string.h>
int main(void)
{
char str[1000][10];
char temp[100];
int i, j, n;

printf("请输入你要输入的字符串的个数:n=");

scanf("%d", &n);
printf("请输入字符串:");

for(i=0; i<n; ++i)
scanf("%s", str+i); //输入指针 str+i
for(j=0; j<n-1; ++j)
for(i=0; i<n-1-j; ++i)
if(strcmp(str[i],str[i+1])>0)
{
strcpy(temp,str[i]);
strcpy(str[i],str[i+1]);
strcpy(str[i+1],temp);
}

for(i=0;i<n;++i)
printf("%s\n", str+i); //输出指针 str+i

return 0;
}追问

为什么是str+i呢

追答

这就是 二维数组 的规律;与 一维数组类似,
二维数组名 可以看成一个指向 一维指针数组的 二维指针;

而这个 一维指针数组 的每一个元素即是指向 一个一维数组。一维数组在存储字符串,或者其他数据。

追问

还是不太明白,printf函数中%s对应的str+i是指针,我觉得的应该对应一个具体的内容,而不是指针啊,这是为什么呢?

前面回答的很好,帮你加分

追答

%s 是输出字符串,但是给的变量就是 该字符串的首地址,即是指针;

比如:
char *p= "abcdefg";
printf("%s", p);
这里的 p 也是字符串的首地址,也是指针!

温馨提示:内容为网友见解,仅供参考
无其他回答

用冒泡排序法对10个字符串排序,并按从小到大的顺序输出.需要用c语言...
include "stdio.h"#include "string.h"int main(){ char co[10][20]={0}; char *p[10]={NULL},*tmp=NULL; int i,j; for(i=0;i<10;i++) p[i]=co[i]; printf("请输入10个字符串:\\n"); for(i=0;i<10;i++) gets(co[i]); for(i=0;i<...

输入10个数,用冒泡排序法按由小到大顺序排序并输出??c语言的
冒泡排序的程序代码如下:include<stdio.h> int main(){ int a[10]={0};int i=0,j=0,t=0;for(i=0;i<10;i++){scanf("%d",&a[i]);} for(i=0;i<10;i++){for(j=0;j<10-i;j++){ if(a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}}} for(i=0;i...

用c语言程序设计:输入5个整数,利用冒泡排序法,从小到大排序后输出。
include<stdio.h>void main(){int a[5];printf("请输入5个整数:");for(int val=0;val<=4;val++)scanf("%d",&a[val]);for(int i=0;i<=4;i++){for(int j=i+1;j<=4;j++){if(a[i]>a[j]){int tmp;tmp = a[i];a[i] = a[j];a[j] = tmp;}}}printf("排序后...

c 语言编程——求用冒泡排序法从大到小输出一串数字。还有 ,排序的程 ...
void sort(int a[],int n){ int i,j,t;for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} } void main(){ int arr[10],i;printf("输入10个整数:\\n");for(i=0;i<10;i++)scanf("%d",&arr[i]);sort(a...

C语言编程:将输入的N个整数采用冒泡排序按照从小到大的顺序排列并且输出...
void BubbleSort(int L[]) { \/\/ 对顺序表L作冒泡排序 int i,j,fini = 0;for (i = 1; i < n && !fini; i++) { fini = 1;for (j = 1; j <= n-i; j++)if (L[j] > L[j+1]) { L[0] = L[j];L[j] = L[j+1];L[j+1] = L[0];fini = 0;} } } ...

冒泡排序:输入n个字符串,对其进行冒泡排序,使其按从小到大顺序输出
以字符串指针数组为基础,进行冒泡排序,参考代码如下 include<stdio.h> include<string.h> define N 5 define L 200 void sort(char *p[], int n){ int i,j;char *t;for(i=0;i<n-1;++i)for(j=0;j<n-i-1;++j)if(strcmp(p[j],p[j+1])>0){ t=p[j];p[j]=p[j+1];...

c语言实现:使用冒泡排序,从小到大排列,输出每一趟排序后的结果以及总...
include<stdio.h>int main(){ int num=6,tep,sum=0; int a[6]= {2,1,10,8,7,6}; int i,j; printf("原数组:"); for(int p=0; p<num; p++) printf("%d ",a[p]); puts(""); for(i=0; i<num-1; i++) { for(j=0; j<num-i; ...

C语言:写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排列
冒泡排序需要用到两层循环,第一层循环遍历数组中的元素,第二层则进行两两比较,如果顺序不对就要对其进行换位,直到排序完成:4、最后执行程序观察结果,按下crtl+F5弹出程序,随意输入10个数,按下回车键执行结果,此时就可以看到排序后的结果了。以上就是c语言冒泡排序程序的演示:...

字符串的冒泡排序(一定要用c语言)
1、首先新建一个控制台应用程序。2、接着准备整型的数组,后面排序好用。3、然后进行for嵌套,注意内外嵌套的写法。4、接着在内层嵌套中进行数据比较,然后进行排序。5、接着就是对排序后的数组进行打印一下。6、最后我们可以看到冒泡排序后的结果了。

用起泡法给输入的字符按ASCN码排序从小到大输出 C语言
第一个循环控制中应该改成 for (i=0;i<=strlen(string)-2;j++);或者for(i=0;i<strlen(string)-1;i++) 这里楼上的说错了,不只要去一个等号,还要减去一个1.【n-1轮循环】第二个循环改成for(j=0;j<=strlen(string)-i-1;j++),或者直接去掉一个=号 5.c语言是一门科学,很...

相似回答