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);

}