#include<stdio.h>
#include(string.h>
int main()
{
void sort(char * name[],int n);
void printf(char *name[],int n);
char * name[]={"Follow me","BASIC",Great Wall","FORTRAN","Computer design"};
int n=5;
sort(name,n);
printf(name,n);
system("pause");
returen 0;
}
void sort(char * name[],int n)
{
int i,j,k;
char * temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(strcmp(name[k],name[j])>0) k=j; /*求各位大侠解释一下这句话的含义啊?name[k]和[j]明明是两个字符串的首地址,为什么可以直接拿来作比较呢*/
}
if (k!=i)
{temp=name[i];name[i]=name[k];name[k]=temp;}
}
}
void printf(char * name[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
return 0;
}
这位大侠小弟想问一下 {temp=name[i];name[i]=name[k];name[k]=temp;}这里交换的是什么变量啊?
追答交换的是指向字符串的指针,因为数组的成员就是指针,要想交换字符串输出,只需要交换指向字符串的指针就行了。
printf("%s\n",name[i]);从这里你就可以看出name[i]是一个指针,输出的是%s。
这位大侠为什么我在printf("%s\n",*name[i]);里面加了个 *就错了呢?
追答肯定错了啊,name[i]是一个指向字符串的指针,printf("%s\n",name[i]);就相当于你以前见到的printf("%s\n",p);因为现在输出的是字符串,所以p一定要是指针。
而*name[i]是字符串的首字母,不能用%s输出,而应该用%c输出,你换成printf("%c\n",*name[i]);就不会报错了。
但你这个程序是要输出排序后的字符串,所以输出的应该是printf("%c\n",name[i]);
为什么说*name[i]是字符串的第1个字母啊?
追答在原数组里,name[0]就是指向字符串"Follow me"的指针,*name[0]就相当于取出指针所指向的值,这里指向的就是第一个字符'F',*(name[0]+1)就是‘o’。你一定要清楚name[ ]数组里存放的是指针
各位C语言的高手们,小弟今个遇到一道:将若干字符串按字母顺序(由小到大...
int strcmp(const char *, const char *)name是char *的数组,所以每个name[i]都是char
C语言:编写程序,把字符数组中的字母按由小到大 的顺序排列并输出
}int main() { char s[] = "kjferu21398dyfkaqpoia"; qsort(s, strlen(s), 1, cmp); printf("%s", s); return 0;}
c语言中从键盘输入N个字符串,将字符串按从小到大的顺序排列并输出
代码如下:define N 10 int main(){char str[N][100]; int i,j; for(i = 0; i < N; i ++) scanf("%s",str[i]); for(i = 0; i < N-1; i ++) { for(j = i+1; j < N; j ++){ if(strcmp(str[i],str[j])>0) { char temp[100]; strcpy(temp,str[i]);...
C语言(1)输入1个字符串,对该字符串按字符大小从小到大的顺序排序,然后...
int main( ){char s[100],*p,*p1,*p2,c;gets(s); \/\/读取字符串 for(p=s;*p;p++); \/\/求得串长,p指向'\\0'p--; \/\/冒泡排序外循环终点 for(p1=s;p1<p;p1++,p--) \/\/此二重循环为冒泡排序 for(p2=s;p2*(p2+1)){c=*p2;*p2=*(p2+1);*(p2+1)=c;} p...
C语言 从键盘输入n个字符串,从大到小排序输出
include<string.h> int main(){int i,j,n;char s[100][20],t[20];scanf("%d",&n);for(i=0;i<n;i++)scanf("%s",s[i]);printf("=== After sort ===\\n");for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy...
C语言:给定一英文字母字符串,先用大写输出一遍,再用小写输出一遍,最后...
这个题目可以写一个输出大写字母的函数,和一个输出小写字母的函数,对不符合大小写的字母进行更改,其余的字符不改变。输出原串的话,直接输出就可以。
用C语言,输入n个字符串,n由键盘输出,将n个字符串中由小到大输出
define MAX 100 void main(){ char *str[MAX], *tmp;int min;int n, i, j;tmp = (char*)malloc(MAX * sizeof(char));\/*输入字符串*\/ printf ("\\nHow many strings: ");scanf ("%d", &n);getchar ();printf ("input the strings: \\n");for (i = 0; i < n; i++) ...
如何用C语言编程将字符串s中的所有字符按ASCII值从小到大重新排序后输出...
include "string.h"int main(){char s[100],t;int i,j,sum;printf("Input:\\n");gets(s);sum=strlen(s);for(i=0;i<sum-1;i++)for(j=0;j<sum-i-1;j++)if(s[j+1]<=s[j]){t=s[j];s[j]=s[j+1];s[j+1]=t;} printf("Output:\\n");puts(s);return 0;} ...
c语言 输入4个整数\/字符串,按从小到大的顺序输出
include<stdio.h> int main(){ char a[5];int i,j,t;for(i=0;i<4;i++)scanf("%c",&a[i]);for(i=0;i<4;i++)for(j=1;j<4;j++)if(a[j-1]>a[j]){ t=a[j-1];a[j-1]=a[j];a[j]=t;} for(i=0;i<4;i++)printf("%c ",a[i]);return 0;} ...
C语言问题 输入三个字符串,按由小到大的顺序输出
1、修改代码 char temp[100];temp==q1;q1==q2;q2==temp;==换成=,=才是赋值运算符。2、换用其他方法 可以使用三个数组,或者是一个二维数组来存储字符串,同时定义一个指针数组,指向三个字符串的首地址,然后对指针数组进行排序。