C语言数组练习-字符串排序

要求:输入3行,每行n个字符串,按由小到大的顺序输出

声明:本代码思路简单但书写麻烦,请酌情参考。

---------------------------------------------------------------------------------------------------------------------------------

代码 :

int cpar3(char a, char b, char c)//比较三个字符串中同位置的大小
{
    if (a < b && a < c)
    {
        return 1;
    }
    if (b < a && b < c)
    {
        return 2;
    }
    if (c < a && c < b)
    {
        return 3;
    }
    if (a < c && a == b)
    {
        return 4;
    }
    if (a < b && a == c)
    {
        return 5;
    }
    if (b < a && b == c)
    {
        return 6;
    }
    if (a == b && a == c)
    {
        return 0;
    }
}

int cpar2(char a, char b)//比较两字符串中同位置的大小
{
    if (a < b)
    {
        return 1;
    }
    if (b < a)
    {
        return 2;
    }
    if (a == b)
    {
        return 0;
    }
}

//思路:先将三个字符串一起比较,直到输出一个最小的;再比较剩下两个字符串。
int main()
{
    char ch_1[100];
    char ch_2[100];
    char ch_3[100];
    scanf("%s", &ch_1);
    scanf("%s", &ch_2);
    scanf("%s", &ch_3);
    int i, j;
    for (i = 0; i < strlen(ch_1); i++)
    {
        if (cpar3(ch_1[i], ch_2[i], ch_3[i]) == 1)
        {
            for (j = 0; j < strlen(ch_1); j++)
            {
                printf("%c", ch_1[j]);
            }
            printf("\n");
            for (i = 0; i < strlen(ch_1); i++)
            {
                if (cpar2(ch_2[i], ch_3[i]) == 1)
                {
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    printf("\n");
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    return 0;
                }
                else if (cpar2(ch_2[i], ch_3[i]) == 2)
                {
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    printf("\n");
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    return 0;
                }
            }
        }
        if (cpar3(ch_1[i], ch_2[i], ch_3[i]) == 2)
        {
            for (j = 0; j < strlen(ch_1); j++)
            {
                printf("%c", ch_2[j]);
            }
            printf("\n");
            for (i = 0; i < strlen(ch_1); i++)
            {
                if (cpar2(ch_1[i], ch_3[i]) == 1)
                {
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    printf("\n");
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    return 0;
                }
                else if (cpar2(ch_1[i], ch_3[i]) == 2)
                {
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    printf("\n");
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    return 0;
                }
            }
        }
        if (cpar3(ch_1[i], ch_2[i], ch_3[i]) == 3)
        {
            for (j = 0; j < strlen(ch_1); j++)
            {
                printf("%c", ch_3[j]);
            }
            printf("\n");
            for (i = 0; i < strlen(ch_1); i++)
            {
                if (cpar2(ch_1[i], ch_2[i]) == 1)
                {
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    printf("\n");
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    return 0;
                }
                else if (cpar2(ch_1[i], ch_2[i]) == 2)
                {
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    printf("\n");
                    for (j = 0; j < strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    return 0;
                }
            }
        }
        if (cpar3(ch_1[i], ch_2[i], ch_3[i]) == 4)
        {
            for (i = 1; i <= strlen(ch_1); i++)
            {
                if (cpar2(ch_1[i], ch_2[i]) == 1)
                {
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    return 0;
                }
                else if (cpar2(ch_1[i], ch_2[i]) == 2)
                {
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    return 0;
                }
            }
        }
        if (cpar3(ch_1[i], ch_2[i], ch_3[i]) == 5)
        {
            for (i = 1; i <= strlen(ch_1); i++)
            {
                if (cpar2(ch_1[i], ch_3[i]) == 1)
                {
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    return 0;
                }
                else if (cpar2(ch_1[i], ch_3[i]) == 2)
                {
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    return 0;
                }
            }
        }
        if (cpar3(ch_1[i], ch_2[i], ch_3[i]) == 6)
        {
            for (i = 1; i <= strlen(ch_1); i++)
            {
                if (cpar2(ch_2[i], ch_3[i]) == 1)
                {
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    return 0;
                }
                else if (cpar2(ch_2[i], ch_3[i]) == 2)
                {
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_3[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_2[j]);
                    }
                    printf("\n");
                    for (j = 0; j <= strlen(ch_1); j++)
                    {
                        printf("%c", ch_1[j]);
                    }
                    return 0;
                }
            }
        }
    }
    return 0;
}

### 关于C语言数组的学习与练习 #### 数组的概念 数组是一种数据结构,用于存储相同类型的元素集合。在C语言中,数组通过索引来访问其元素,索引从0开始。数组的定义方式如下所示[^3]: ```c int arr1[2]; // 定义了一个包含两个整数的数组 ``` #### 示例代码:经典题目解析 以下是几个经典的C语言数组相关题目及其解决方案。 --- ##### **1. 多个字符从两端移动,向中间汇聚** 此题可以通过设置两个指针分别指向字符串的首尾来实现。每次交换首尾字符并逐步靠近中心。 ```c #include <stdio.h> #include <string.h> void moveTowardCenter(char str[]) { int i = 0, j = strlen(str) - 1; while (i < j) { char temp = str[i]; str[i++] = str[j]; str[j--] = temp; } } int main() { char str[] = "hello"; printf("Original string: %s\n", str); moveTowardCenter(str); printf("Reversed string: %s\n", str); return 0; } ``` [^2] --- ##### **2. 利用二分查找法查找有序数组中的目标值** 对于已排序数组,可以采用二分查找算法提高效率。 ```c #include <stdio.h> int binarySearch(int arr[], int size, int target) { int low = 0, high = size - 1; while (low <= high) { int mid = low + (high - low) / 2; if (arr[mid] == target) return mid; else if (arr[mid] < target) low = mid + 1; else high = mid - 1; } return -1; // 如果未找到返回-1 } int main() { int arr[] = {1, 3, 5, 7, 9}; int size = sizeof(arr) / sizeof(arr[0]); int target = 5; int index = binarySearch(arr, size, target); if (index != -1) printf("Element found at index: %d\n", index); else printf("Element not found.\n"); return 0; } ``` --- ##### **3. 找出数组中的最大值和次大值** 遍历数组两次即可完成任务,第一次找最大值,第二次排除最大值得到次大值。 ```c #include <stdio.h> void findMaxAndSecondMax(int arr[], int size) { int max = arr[0], secondMax = arr[0]; for (int i = 1; i < size; i++) { if (arr[i] > max) { secondMax = max; max = arr[i]; } else if (arr[i] > secondMax && arr[i] != max) { secondMax = arr[i]; } } printf("Maximum value: %d\n", max); printf("Second maximum value: %d\n", secondMax); } int main() { int arr[] = {3, 5, 7, 2, 8, 6}; int size = sizeof(arr) / sizeof(arr[0]); findMaxAndSecondMax(arr, size); return 0; } ``` --- ##### **4. 数组的反转** 使用双指针方法,将数组头尾互换直至相遇。 ```c #include <stdio.h> void reverseArray(int arr[], int size) { int start = 0, end = size - 1; while (start < end) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } void printArray(int arr[], int size) { for (int i = 0; i < size; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); printf("Original array:\n"); printArray(arr, size); reverseArray(arr, size); printf("Reversed array:\n"); printArray(arr, size); return 0; } ``` --- ##### **5. 对数组元素排序** 可使用冒泡排序或其他简单排序算法对数组升序排列。 ```c #include <stdio.h> void bubbleSort(int arr[], int size) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } void printArray(int arr[], int size) { for (int i = 0; i < size; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int size = sizeof(arr) / sizeof(arr[0]); printf("Unsorted array:\n"); printArray(arr, size); bubbleSort(arr, size); printf("Sorted array:\n"); printArray(arr, size); return 0; } ``` --- ##### **6. 使用递归计算阶乘** 递归函数是解决此类问题的有效工具之一。 ```c #include <stdio.h> long long factorial(int n) { if (n == 0 || n == 1) return 1; return n * factorial(n - 1); } int main() { int n = 5; printf("Factorial of %d is %lld\n", n, factorial(n)); return 0; } ``` --- ##### **7. 计算斐波那契数列中的第N项** 可通过迭代或递归来解决问题。 ```c #include <stdio.h> int fibonacci(int n) { if (n == 0) return 0; if (n == 1) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } int main() { int n = 10; printf("Fibonacci number at position %d is %d\n", n, fibonacci(n)); return 0; } ``` --- ##### **8. 统计数组中每个元素出现的次数** 创建一个辅助数组记录频率。 ```c #include <stdio.h> #define MAX_SIZE 100 void countFrequency(int arr[], int size) { int frequency[MAX_SIZE] = {0}; for (int i = 0; i < size; i++) { frequency[arr[i]]++; } for (int i = 0; i < MAX_SIZE; i++) { if (frequency[i] > 0) { printf("Number %d appears %d times\n", i, frequency[i]); } } } int main() { int arr[] = {1, 2, 2, 3, 3, 3}; int size = sizeof(arr) / sizeof(arr[0]); countFrequency(arr, size); return 0; } ``` [^5] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值