//返回


第一题
//编写函数 void f(char str[80])要求将字符串中所有数字字符前加一个‘*’,例如输入:g5f78t5f. 输出 g*5f*7*8t*5f
/*****************************************************************/
#include <stdio.h>
#include <string.h>

void f(char str[80]) {
    int len = strlen(str); //获取字符串长度
    for (int i = len - 1; i >= 0; i--) { //从后往前遍历字符串
        if (str[i] >= '0' && str[i] <= '9') { //如果是数字字符
            for (int j = len; j >= i; j--) { //将后面的字符后移一位
                str[j + 1] = str[j];
            }
            str[i] = '*'; //在数字字符前加一个‘*’
            len++; //更新字符串长度
        }
    }
}

int main() {
    char s[80];
    printf("请输入一个字符串:\n");
    scanf("%s", s);
    f(s);
    printf("输出结果为:\n");
    printf("%s\n", s);
    return 0;
}

第二题
//编写函数 int f(char str[])要求将字符串中所有数字字符识别出来,然后构造成一个数返回
/*****************************************************************/
#include <stdio.h>

int f(char str[]) {
    int num = 0; //用来存储结果
    int flag = 0; //用来标记是否遇到过数字字符
    for (int i = 0; str[i] != '\0'; i++) { //遍历字符串
        if (str[i] >= '0' && str[i] <= '9') { //如果是数字字符
            num = num * 10 + (str[i] - '0'); //将其加到结果中
            flag = 1; //标记为已遇到数字字符
        } else if (flag == 1) { //如果不是数字字符,且已经遇到过数字字符
            continue; //结束循环
        }
    }
    return num; //返回结果
}

int main() {
    char s[80];
    printf("请输入一个字符串:\n");
    scanf("%s", s);
    int res = f(s);
    printf("输出结果为:\n");
    printf("%d\n", res);
    return 0;
}

第三题
//编写函数 void f(int a[],int n),要求最大的与第一个交换,最小的与最后一个交换
/*****************************************************************/
#include <stdio.h>

void f(int a[], int n) {
    int max = a[0]; //用来存储最大值
    int min = a[0]; //用来存储最小值
    int max_index = 0; //用来存储最大值的下标
    int min_index = 0; //用来存储最小值的下标
    for (int i = 1; i < n; i++) { //遍历数组
        if (a[i] > max) { //如果当前元素大于最大值
            max = a[i]; //更新最大值
            max_index = i; //更新最大值的下标
        }
        if (a[i] < min) { //如果当前元素小于最小值
            min = a[i]; //更新最小值
            min_index = i; //更新最小值的下标
        }
    }
    //交换最大值和第一个元素
    int temp = a[0];
    a[0] = max;
    a[max_index] = temp;
    //交换最小值和最后一个元素
    temp = a[n - 1];
    a[n - 1] = min;
    a[min_index] = temp;
}

int main() {
    int arr[] = {5, 3, 8, 2, 6, 9, 1, 4, 7};
    int len = sizeof(arr) / sizeof(arr[0]); //计算数组长度
    printf("原数组为:\n");
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    f(arr, len); //调用函数
    printf("交换后的数组为:\n");
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

第四题
//编写函数 void f(char *str),通过指针实现将字符串反向
/*****************************************************************/
#include <stdio.h>
#include <string.h>

void f(char *str) {
    int len = strlen(str); //获取字符串长度
    char *p1 = str; //指向字符串首元素的指针
    char *p2 = str + len - 1; //指向字符串尾元素的指针
    while (p1 < p2) { //当两个指针没有相遇时
        char temp = *p1; //交换两个指针所指向的字符
        *p1 = *p2;
        *p2 = temp;
        p1++; //将首指针后移一位
        p2--; //将尾指针前移一位
    }
}

int main() {
    char s[80];
    printf("请输入一个字符串:\n");
    scanf("%s", s);
    f(s); //调用函数
    printf("输出结果为:\n");
    printf("%s\n", s);
    return 0;
}

第五题
//5、	编写函数 实现一个英文句子按单词逆序存放的功能,如:this is an book 结果为book an is this(难度:较高)
/*****************************************************************/
#include <stdio.h>
#include <string.h>

void reverse(char *str, int start, int end) {
    //反转字符串中指定区间的字符
    char *p1 = str + start; //指向区间首元素的指针
    char *p2 = str + end; //指向区间尾元素的指针
    while (p1 < p2) { //当两个指针没有相遇时
        char temp = *p1; //交换两个指针所指向的字符
        *p1 = *p2;
        *p2 = temp;
        p1++; //将首指针后移一位
        p2--; //将尾指针前移一位
    }
}

void f(char *str) {
    int len = strlen(str); //获取字符串长度
    reverse(str, 0, len - 1); //先反转整个字符串
    int start = 0; //用来记录单词的起始位置
    for (int i = 0; i <= len; i++) { //遍历字符串
        if (str[i] == ' ' || str[i] == '\0') { //如果遇到空格或结束符
            reverse(str, start, i - 1); //反转当前单词
            start = i + 1; //更新下一个单词的起始位置
        }
    }
}

int main() {
    char s[80];
    printf("请输入一个英文句子:\n");
    gets(s); //输入一个英文句子,注意不能用scanf,因为它会遇到空格就停止输入
    f(s); //调用函数
    printf("输出结果为:\n");
    printf("%s\n", s);
    return 0;
}