Ⅰ c語言:輸入三個字元串並按字母順序排序後輸出
我不大會改程序,這是我寫的程序,我試過可以了,與你的要求符舍。
#include <stdio.h>
#include <string.h>
void main()
{
void ex(char *n[]);
char *name[3];
char a[10],b[10],c[10];
int i;
name[0]=a;
name[1]=b;
name[2]=c;
for(i=0; i<3; i++)
scanf("%s",name[i]);
ex(name);
printf("\n");
for(i=0; i<3; i++)
printf("%s\n",name[i]);
}
void ex(char *n[])
{
char *temp;
int i,j;
for(i=0; i<2; i++)
for(j=i+1; j<3; j++)
if(strcmp(n[i],n[j])>0)
{strcpy(temp,n[i]);
strcpy(n[i],n[j]);
strcpy(n[j],temp);
}
getchar();
}
問題
1.strcmp返回值是大小,但你用if(strcmp(*n[i],*n[j]))
的話只會檢查是否等於0,不等於0則執行後面。。
所以應該是if(strcmp(*n[i],*n[j]>0).
2.for(j>i; j<3; j++) 在fork中沒有j>i的寫法改一下就行了
3.數組之間的交換不能用=的方式,要用strcpy語句
這是我個人的看法,還有問題寫我聯系,我QQ:452497054
有興趣的話交個朋友
Ⅱ C語言 對輸入的n個字元串進行排序,並輸出(排序過程中會改變字元串真正的存放位置)
#include<stdio.h>
#include<string.h>
void main ()
{
char s[10][100],t[100];//用二維數組最大輸入10個字元串,T為裝字元串的數組
int n=0,i,j,k;
scanf("%d",&n);//輸入次數
for(i=0;i<n+1;i++){//輸入n次字元串//是i<n+1,不是i<n,也可以改為i<=n
gets(s[i]);
}
for(i=0;i<n+1;i++)//掃描5次字元串組
{
for(j=i+1;j<n+1;j++)
{
if(strcmp(s[i],s[j])>0)//從小到大排列
{
strcpy(t,s[i]);//數組賦值用strcpy不能用=這個方式
strcpy(s[i],s[j]);
strcpy(s[j],t);
}
}
}
for(i=0;i<n+1;i++){//是i<n+1,不是i<n,也可以改為i<=n
puts(s[i]);
}
}
Ⅲ C語言(1)輸入1個字元串,對該字元串按字元大小從小到大的順序排序,然後輸出這個已經排好序的字元串。
#include<stdio.h>
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<p;p2++)
if(*p2>*(p2+1))
{c=*p2;*p2=*(p2+1);*(p2+1)=c;}
puts(s);
return 0;
}
程序2:
#include<stdio.h>
int main( )
{char s1[100],s2[100],s3[200],s4[200],*p,*p1,*p2;
gets(s1); //讀取二個字元串
gets(s2);
for(p=s1,p1=s3;*p;) //復制s1到s3前部
*(p1++)=*(p++);
for(p=s2;*p;) //復制s2到s3後部
*(p1++)=*(p++);
*p1=*p; //設置字元串尾
for(p=s2,p1=s4;*p;) //復制s2到s4前部
*(p1++)=*(p++);
for(p=s1;*p;) //復制s1到s4後部
*(p1++)=*(p++);
*p1=*p; //設置字元串尾
for(p1=s3,p2=s4;*p1==*p2;p1++,p2++); //比較s3與s4逐個字元的大小,直到遇到不同的字元
if(*p1>*p2)puts(s3); //輸出較大字元所在的字元串
else puts(s4);
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]); strcpy(str[i],str[j]); strcpy(str[j],temp);} } } for(i = 0; i < N; i ++) puts(str[i]);}。
運行代碼:
(4)C語言子串排序輸出擴展閱讀
在C語言編程中,常常需要對字元串比較和排序,經常遇到對字元串整體的控制等操作,strcmp 比較str1和str2的大小,而其它的c函數strlen(),字元串拷貝函數strcpy()/strncpy(),字元串比較函數 strcmp(),字元串連接函數strcat()/strncat()等,都可以幫助我們快速方便的對字元串操作。
Ⅳ c語言中從鍵盤輸入N個字元串,將字元串按從小到大的順序排列並輸出
1
輸入字元串;
2
對字元串進行排序;
3
輸出。
排序中需要注意:
1
用strcmp比較字元串;
2
用strcpy執行字元串的賦值。
代碼如下:
#define N 50
int main()
{
char s[N][100];
int i,j;
for(i = 0; i < N; i ++)
scanf("%s",s[i]);
for(i = 0; i < N-1; i ++)
{
for(j = i+1; j < N; j ++)
{
if(strcmp(s[i],s[j])>0)
{
char t[100];
strcpy(t,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],t);
}
}
}
for(i = 0; i < N; i ++)
puts(s[i]);
}
Ⅵ C語言編程題: 輸入10個字元串,將其從大到小排序後輸出。
#include<stdio.h>
void swap1(int *p,int n){
int temp;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(p[i]>p[j]){
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
void swap2(int *p,int n){
int temp;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(p[i]<p[j]){
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
int main(){
char n;int a[15];
while(~scanf("%c",&n)){
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
getchar();
if(n=='A') swap1(a,10);
else swap2(a,10);
for(int i=0;i<10;i++){
if(i==0)printf("%d",a[i]);
else printf(" %d",a[i]);
}
printf(" ");
}
}
運行效果:
(6)C語言子串排序輸出擴展閱讀:
printf函數使用注意事項
1、域寬
%d:按整型數據的實際長度輸出。
如果想輸出指定寬度可以指定域寬,%md-->m域寬,列印出來以後,在控制台上,顯示m位;
如果我們要列印的數的位數如果超過我們設定m則原樣輸出;
如果我們要列印的數的位數如果小於我們設定的位數,則補空白,具體如下:
如果m為正數,則左對齊(左側補空白);
如果m為負數,則右對齊(右側補空白)。
2、轉義字元
如果想輸出字元"%",則應該在「格式控制」字元串中用連續兩個%表示。
如:printf("%f%%",1.0/3);輸出結果:0.333333%。
Ⅶ 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;
}
(7)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>
int main ()
{
char name[40] ; //聲明一個叫name的儲存空間,數組的元素數目是40
printf("what is your name ? ");//轉化說明字元/n換行
scanf("%s,name");//輸入一個字元串,使用了%s的轉化修飾符,表示輸入字元串
printf("hello,%s. ",name);//輸出字元串
return 0;
}
(8)C語言子串排序輸出擴展閱讀
1、兩個字元串,如果兩個字元串相等,則返回0;若str1大於str2(對於大於的理解,是指從兩個字元串的第一個字元開始比較,若兩個字元相同,則繼續比較,若發現兩個字元不相等。
2、對於將數字轉換為字元串,c標准中並沒有定義。c標准中沒有定義的原因我覺得是數字轉成字元串可以使用sprintf格式化輸出函數來完成。
Ⅸ C語言程序:將若干字元串按字母順序(由小到大)輸出
兩個程序代碼都可以,教材中的代碼相比較效率要高,因為教材中的演算法每次遇到字元串小的只是單純 對k賦值一次,而你的是每次都要交換數值(指針),假設最終交換了2次,對賦值而言教材演算法運行2+1次,你的是3*2次
Ⅹ 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;
}
運行效果:
(10)C語言子串排序輸出擴展閱讀:
scanf函數用法:
scanf("輸入控制符",輸入參數);
功能:將從鍵盤輸入的字元轉化為「輸入控制符」所規定格式的數據,然後存入以輸入參數的值為地址的變數中。
用scanf()函數以%s格式讀入的數據不能含有空白符時,所有空白符都被當做數據結束的標志。所以題中函數輸出的值只有空格前面的部分。
如果想要輸出包括空格在內的所有數據,可以使用gets()函數讀入數據。gets()函數的功能是讀取字元串,並存放在指定的字元數組中,遇到換行符或文件結束標志時結束讀入。換行符不作為讀取串的內容,讀取的換行符被轉換為字元串結束標志'