对输入的8个字符串(每个字符串长度不超过20)按照字典顺序进行排序并输出。不限定排序方法,不能使用goto语句。 输入输出格式: 输入:%s 输出:%s\n 输入:多个字符串用空格分隔

对输入的8个字符串(每个字符串长度不超过20)按照字典顺序进行排序并输出。不限定排序方法,不能使用goto语句。 输入输出格式: 输入:%s 输出:%s\n 输入:多个字符串用空格分隔 输出:排序好的字符串,每行一个字符串,末尾有空行。

输入输出样例:
输入:
diankuang liuxu sui fengwu qingbo taohua zhu shuiliu
输出:
diankuang
fengwu
liuxu
qingbo
shuiliu
sui
taohua
zhu

————————————————————————————方法1(稍微复杂)————————————————————

#include 
#include 
int main( )
{
//______1
    char s[8][20];
    for (int i = 0; i < 8; i++) {
        scanf("%s",s[i]);
    }
//______2    
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 7-i; j++) {
 //——————————————strcmp函数的 相同功能的代码 ————————————————————         
            if (s[j][0] > s[j+1][0])
            {
                char a[20];
                strcpy(a, s[j]);
                strcpy(s[j], s[j+1]);
                strcpy(s[j+1], a);
            }
            else if(s[j][0] == s[j+1][0])
            {
                int k = 0;
                while(s[j][k] == s[j+1][k])
                {
                    if (s[j][k+1] > s[j+1][k+1]) {
                        char a[20];
                        strcpy(a, s[j]);
                        strcpy(s[j], s[j+1]);
                        strcpy(s[j+1], a);
                        break;
                    }
                    k++;
                }
 //——————————————————————————————————————————————————————————               
                
            }
        }
    }
//_______3    
    for (int i = 0; i < 8; i++) {
        printf("%s\n",s[i]);
    }
}




//结果:
diankuang liuxu sui fengwu qingbo taohua zhu shuiliu
diankuang
fengwu
liuxu
qingbo
shuiliu
sui
taohua
zhu
Program ended with exit code: 0
——————————————————————————方法2——————————————————————————————
#include
#include
#define MAX 8
#define CMAX 10
int main()
{		    	 	
    char a[MAX][CMAX], term[CMAX];                                   
    int i, j;
    for (i = 0; i < 8; i++)
    {		    	 	
        scanf("%s", a[i]);                                            
    }
 
    for (i = 0; i < 8 - 1; i++)                                
    {		    	 	
        for (j = 1; j < 8 - i; j++)                            
        {		    	 	
            if (strcmp(a[j], a[j - 1]) < 0)                     
            {		    	 	
                strcpy(term, a[j]);                             
                strcpy(a[j], a[j - 1]);                         
                strcpy(a[j - 1], term);                         
            }
        }
    }
    for (i = 0; i < 8; i++)
    {		    	 	
        printf("%s\n", a[i]);
    }
    return 0;
}

题目条件:【考察二维数组】

  1. 接受八个字符串;注意不要用gets,gets会接受空格,按照题目要求是以空格分开的字符串
  2. 比较每个字符串开头字符的大小,根据运行事例可以得出:如果相等,就比较下一个;按照字母表的顺序–>即ascall码的大小
  3. 打印排好序的字符串,注意格式

知识调动

strcpy函数

strcpy(一号字符串,二号字符串)
可以把二号字符串复制到一号字符串里面
因此可以用于字符串交换,类似于之前的两个变量交换

strcmp函数

strcmp(一号字符串,二号字符串)
比较一号字符串与二号字符串的大小
原理就是根据ascall码来比较
方法一中有写不用strcmp函数的办法

思路:

仔细慢慢逻辑清晰的写代码就可以

你可能感兴趣的:(c语言每日一道练习题,c语言题)