Ⅰ c語言字元串排序
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAX 10
void stsrt(char *str[],int num);
void ASC(char *str[],int num);
void length_add(char *str[],int num);
void word_length(char *str[],int num);
int main(void) {
char *s[MAX],t[80];
int i = 0,n;
printf("輸入%d個字元串 :\n",MAX);
for(i = 0; i < MAX; ++i) {
if(gets(t) && t[0] != '\0') {
s[i] = (char *)malloc(80 * sizeof(char));
strcpy(s[i],t);
}
else break;
}
while(i < MAX && gets(s[i]) && s[i][0] != '\0') i++;
puts("選擇:");
puts("1.輸出初始字元串列表");
puts("2.按ASCⅡ碼順序輸出字元串");
puts("3.按長度遞增順序輸出字元串");
puts("4.按字元串第一個單詞長度輸出字元串");
puts("5.結束");
while(scanf("%d",&n) != 5) {
switch(n) {
case 1:stsrt(s,i);break;
case 2:ASC(s,i);break;
case 3:length_add(s,i);break;
case 4:word_length(s,i);break;
case 5:return 0;
default:puts("輸入錯誤!");
}
}
return 0;
}
void stsrt(char *str[],int num) { //1.輸出初始字元串列表
int n;
for(n = 0;n < num;n++) puts(str[num]);
}
void ASC(char *str[],int num) {//2.按ASCⅡ碼順序輸出字元串
int top,seek;
char *temp;
for(top = 0;top < num - 1;top++) {
for(seek = top + 1;seek < num;seek++)
if(strcmp(str[top],str[seek]) > 0) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
for(int n = 0;n < num;n++) puts(str[n]);
}
void length_add(char *str[],int num) { //3.按長度遞增順序輸出字元串
char *temp;
int top,seek;
for(top = 0;top < num - 1;top++) {
for(seek = top + 1;seek < num;seek++)
if(strlen(str[top]) > strlen(str[seek])) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
for(int n = 0;n < num;n++) puts(str[n]);
}
void word_length(char *str[],int num) {//4.按字元串第一個單詞長度輸出字元串
char *temp;
int top,seek,n,j,len[MAX];
for(n = 0; n < num; ++n) {
len[n] = 0;
j = 0;
while((str[n][j] != ' ') && str[n][j]) {
++len[n];
++j;
}
}
for(top = 0;top < num - 1;top++) {
for(seek = top + 1; seek < num;seek++) {
if(len[top] > len[seek]) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
}
for(n = 0;n < num;n++) puts(str[n]);
}
Ⅱ c語言字元串排序問題!
main()
{
char st[100],cs[3][100]; //假設該字元串長度都在100個以內
int i,j,p;
printf("please input strings one by one:\n");
for(i=0;i<3;i++)
gets(cs[i]); //讀取字元串,放在CS數組裡面
printf("\n");
for(i=0;i<3;i++)
{ p=i;strcpy(st,cs[i]);//把CS數組中第i+1行的字元串拷貝給st數組
for(j=i+1;j<3;j++)
if(strcmp(cs[j],st)>0) {p=j;strcpy(st,cs[j]);}//把st(也就是CS〔i〕依次跟它後面的按照ASCII碼順序(strcmp)比較.CS〔j]大的話,就把它拷貝給st數組(也就是給ST數重賦值)。
if(p!=i) //如果p!=i的話,那麼說明cs[i]的後面有一個cs[p]比它大
{
strcpy(st,cs[i]);
strcpy(cs[i],cs[p]);
strcpy(cs[p],st);
}//交換cs[i]和cs[p]的值,目的是把cs[p](ASCII碼比較大的)的值放到前面,
puts(cs[i]);//輸出cs[i],這個時候的cs[i]是跟在它後面的所有元素比較過的,它是在後面所有元素裡面最大的。
} //3次循環,按從大到小分別3次輸出cs[i]
printf("\n");
}
你要是想比較N個字元串的話,可以把裡面的3改成N就行了。
Ⅲ C語言編程題,輸入5個字元串,然後排序
#define LINEMAX 20/*定義字元串的最大長度*/
int main()
{int i;
char**p,*pstr[5],str[5][LINEMAX];
for(i=0;i<5;i++)
pstr<i>=str<i>;/*將第i個字元串的首地址賦予指針數組pstr的第i個元素*/
printf("input 5 strings: ");
for(i=0;i<5;i++)
scanf("%s",pstr<i>);
p=pstr;
sort(p);
printf("strings sorted: ");
for(i=0;i<5;i++)
printf("%s ",pstr<i>);
}
sort(char**p)/*冒泡法對5個字元串排序函數*/
{int i,j;
char*temp;
for(i=0;i<5;i++)
{for(j=i+1;j<5;j++)
{if(strcmp(*(p+i),*(p+j))>0)/*比較後交換字元串地址*/
{temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
return 0;
}
(3)c語言編寫字元串排序擴展閱讀:
printf()函數的調用格式為:printf("<格式化字元串>",<參量表>)。
其中格式化字元串包括兩部分內容:一部分是正常字元,這些字元將按原樣輸出;另一部分是格式化規定字元,以"%"開始,後跟一個或幾個規定字元,用來確定輸出內容格式。
參量表是需要輸出的一系列參數,其個數必須與格式化字元串所說明的輸出參數個數一樣多,各參數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。
比如:
int a=1234;
printf("a=%d ",a);
輸出結果為a=1234。
scanf()是C語言中的一個輸入函數。與printf函數一樣,都被聲明在頭文件stdio.h里,因此在使用scanf函數時要加上#include<stdio.h>。
int scanf(const char*restrict format,...);
函數scanf()是從標准輸入流stdin(標准輸入設備,一般指向鍵盤)中讀內容的通用子程序,可以說明的格式讀入多個字元,並保存在對應地址的變數中。
如:
scanf("%d%d",&a,&b);
函數返回值為int型,如果a和b都被成功讀入,那麼scanf的返回值就是2。
Ⅳ c語言進行字元串排序
#include<stdio.h>#include<string.h>#define N 10void main(){ int i,j; char str[N+1][20]; 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) { strcpy(str[N],str[i]); strcpy(str[i],str[j]); strcpy(str[j],str[N]); } for(i=0;i<N;i++) if(i!=N-1) printf("%s ",str[i]); else printf("%s\n",str[i]);}
Ⅳ C語言如何在鍵盤中輸入一個數字字元串並進行排序
樓主你好!
根據你的要求,我使用冒泡排序法,幫寫個了程序,代碼及運行結果如下!如果有不正確之處,請廣大好手指正!謝謝!
#include<stdio.h>#include<string.h>
intmain(){
chara[100];
inti,j;
printf("請輸入字元串: ");
scanf("%s",a);
for(i=0;i<strlen(a);i++)
for(j=0;j<strlen(a)-1-i;j++){
chartemp;
if(a[j]<=a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
printf("排序後的字元串: %s ",a);
return0;
}
希望我的回答對你有幫助!
Ⅵ C語言中如何將10個字元串進行排序
#include<stdio.h>
#include<string.h>
int main()
{
int j,k,i,t,n;
char s[10][10],b[10][10];
for(i=0;i<10;i++)
{
scanf("%s",s[i]);
}
n=strlen(s[1]);
k=0;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{
for(k=0;k<n;k++)
b[j][k]=s[j][k];
for(k=0;k<n;k++)
s[j][k]=s[j+1][k];
for(k=0;k<n;k++)
s[j+1][k]=b[j][k];
}
}
for(i=0;i<10;i++)
{
printf("%s ",s[i]);
}
return 0;
}
運行效果:
(6)c語言編寫字元串排序擴展閱讀:
scanf函數用法:
scanf("輸入控制符",輸入參數);
功能:將從鍵盤輸入的字元轉化為「輸入控制符」所規定格式的數據,然後存入以輸入參數的值為地址的變數中。
用scanf()函數以%s格式讀入的數據不能含有空白符時,所有空白符都被當做數據結束的標志。所以題中函數輸出的值只有空格前面的部分。
如果想要輸出包括空格在內的所有數據,可以使用gets()函數讀入數據。gets()函數的功能是讀取字元串,並存放在指定的字元數組中,遇到換行符或文件結束標志時結束讀入。換行符不作為讀取串的內容,讀取的換行符被轉換為字元串結束標志'