c语言中字符数组问题,字符串排序

同学您好,这是完全可以的
a[5][80]的意思是定义一个字符串数组a[5],每个字符串分配80个储存位置
a[5][80]里面的每一个元素是一个字符
而a[0],a[1]...a[4]则是5个字符串,明白了吗?
望点赞!

㈡ 字符串数组排序(C语言)(qsort库函数)

新鲜出炉:
#include "stdio.h"
#include "string.h"
#include <stdlib.h>

#define N 5 /*字符串个数*/
#define MAXLEN 30 /*字符串最大长度*/
int CompareStrLen( const void * s1, const void * s2)
{
char * r1, * r2;

r1 = (char *)s1;
r2 = (char *)s2;
/*比较字符串长度*/
if (strlen(r1)>strlen(r2))
{
return 1;
}
else if (strlen(r1) < strlen(r2))
{
return -1;
}
else
return 0;

}

int CompareHeaderChar(const void * s1, const void * s2)
{

char * r1, * r2;

r1 = (char *)s1;
r2 = (char *)s2;
//比较首字母
if (*r1 > *r2)
{
return 1;
}
else if ( *r1 < *r2)
{
return -1;
}
else
return 0;
}

int main()
{
const int n=N;
char f[n][MAXLEN];

int k=0, numOfSamelength=1;
/*输入*/
for(int i=0;i<n;i++)
{
printf("输入一串数字:");
scanf("%s",f[i]);
}

/*根据字串长度排序*/
qsort((void *)f, n, sizeof(char [MAXLEN]), CompareStrLen);
printf("\n按照长度排序的结果:\n");
for(i=0;i<n;i++)
{
printf("输出:");
printf("%s\n",f[i]);
}

/*相同长度,根据首字母排序*/
do
{
while( (k<n-1) && (strlen(f[k]) == strlen(f[k+1])))/*计算相邻具有相同长度的字串的个数*/
{
numOfSamelength ++;
k++;
}

/*把字符串数组按照相同长度的一段,根据首字符进行排序*/
qsort((void *)(f+k-numOfSamelength+1), numOfSamelength, sizeof(char [MAXLEN]), CompareHeaderChar);

/*下一段开始,初始化计数器*/
numOfSamelength=1;
k++; /*下一段字符串对应的下标*/
} while (k<n);

printf("\n长度相同字符串按首字符排序的结果:\n");
for(i=0;i<n;i++)
{
printf("输出:");
printf("%s\n",f[i]);
}
return 0;
}
/* 运行结果:
输入一串数字:1
输入一串数字:8
输入一串数字:28456
输入一串数字:52
输入一串数字:25

按照长度排序的结果:
输出:8
输出:1
输出:52
输出:25
输出:28456

长度相同字符串按首字符排序的结果:
输出:1
输出:8
输出:25
输出:52
输出:28456

*/

㈢ C语言中的字符指针数组排序

完整抄程序如下:
#include<stdio.h>
void sort_string(char **p,int n){
int i,j;
char s[80];
for (i=0;i<n-1;i++){
for (j=i+1;j<n;j++){
if (strcmp(*(p+i),*(p+j))<0){
strcpy(s,*(p+i));strcpy(*(p+i),*(p+j));strcpy(*(p+j),s);
};};};
}

int main()
{
char *str[]={ "teacher", "student", "maneger", "employee", "telicent" };
int i,n=5;
sort_string(str,n);
for (i=0;i<n;i++) printf("%s\n",str[i]);
return 0;
}

㈣ 求C语言将数组元素大小排序!!

#include <stdio.h>

int main(){

int numbers[10] = { 10,2,3,4,5,6,9,8,7,1 };

int a,b, text, hello;

for(a=0; a<10-1; a=a+1) { //在这里进行比较的开始的代码

hello = 1; //假如剩下的元素已经被排序好了,然后接着进行下面的比较

for(b=0; b<10-1-i; b=b+1){

if(numbers[b] > numbers[b+1]){

text= numbers[b];

numbers[b] = numbers[b+1];

numbers[b+1] = text;

hello= 0;

}

}

if(hello) break;

}

for(a=0; a<10; a=a+1){

printf("%d ", numbers[a]);

}

printf(" ");

return 0;

}

(4)c语言字符数组排序扩展阅读

C语言中数组元素大小的相关排序规则:

一、首先需要对数组中的元素进行排列,默认是以字符串的规则进行从小到大排序;可接收一个参数:自定义的规则相关排序。参数的具体要求如下:

1、参数首先必须是一个函数;

2、函数必须有一个明确的返回值;

3、返回值必须是number类型,但不可以是NaN。

二、排序中的具体规则:

1、首先每次从数组中挑选出两个元素传入函数中,进行比较,直到所有进行排列的元素都被挑选完毕以后就不要再进行挑选;

2、如果返回值是一个正数,就交换这彼此的位置,实现大小的正确排列;

3、如果返回值是一个负数或0,此时说明大小位置的顺序是正确的,此时就不需要交换彼此的位置。

4、默认同一字符的全角字符看做半角字符。不区分同一个字符(如日文的片假字)的半角与全角状态。相同元素,维持原序,默认区分字母大小写,同一个字符小写在前,大写在后。

注意:对数组的元素进行排序需要不断比较两个数字的大小,10个元素排序一共需要比较9次,直到所有的元素被都完完全全地被比较一次。

㈤ C语言 求字符数组的排序

你思想错了。if(s[i][j]>s[i+1][j+1])
{
t=s[i][j];
s[i][j]=s[i+1][j+1];
s[i+1][j+1]=t;
}这个不能比较字符大小吧,就算能,你这样比较然后换位置,得到的不是原来的字符串啊,而且你不能保证s[3][20]中的三个字符串都是20个字符。
我是这么理解的:

#include<stdio.h>
#include<string.h>
int main()
{
int i,j;
char s[3][20],a[20];
for(i=0;i<3;i++)
gets(s[i]);
for(i=0;i<3;i++){
if(strcmp(s[i],s[i+1])>0){
strcpy(a,s[i]);
strcpy(s[i],s[i+1]);
strcpy(s[i+1],a);
}
}
for(i=0;i<3;i++)
puts(s[i]);
}
测试已通过

㈥ C语言关于字符串数组排序

您好:scanf这个函数里头的用法出了点问题,建议单一的输入解决,scaf("%s",&a[0]);scanf("%s",&a[1]);等分开输入,如果是C++的输入问题就少多了。

㈦ C语言,一个字符串按字母排序

排序算法有问题,而且,你最好确定一下你输入字符串的长度:

#include<stdio.h>
#include<string.h>
voidmain()
{
charc[10];
inti;
intj;
inttemp;
intlength;
gets(c);
length=strlen(c);//你可能输入不到10个字符,所以确定总共字符数
for(i=0;i<length-1;i++)//for(i=0;i<9;i++)
for(j=0;j<length-1-i;j++)//这儿问题最大for(j=0;j<9;j++)
if(c[j]>c[j+1])
{
temp=c[j];
c[j]=c[j+1];
c[j+1]=temp;
}
puts(c);
}

㈧ C语言:编写程序,把字符数组中的字母按由小到大 的顺序排列并输出

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

intcmp(constvoid*a,constvoid*b){
return*(char*)a-*(char*)b;//这里记住一定要用排序的元素类型的指针做强制装换并内且再取指针指向的容值。
}

intmain(){
chars[]="kjferu21398dyfkaqpoia";
qsort(s,strlen(s),1,cmp);
printf("%s",s);
return0;
}

㈨ c语言字符数组排序问题 看如下代码

#include <stdio.h>

#include <string.h>

int main()

{

char a[100], t;

int i, j, min;

int h = 0;

printf("请输入字符排序 ");

scanf("%s", a);

for (i = 0; a[i] != 0; i++)

{

min = i;

for (j = i + 1; a[j] != 0; j++)

{

if (a[j] < a[min])

min = j;

}

t = a[i];

a[i] = a[min];

a[min] = t;


}

printf("%s", a);

}