• C语言学习5-1:字符加法,字符串操作函数编写,查找数组中第二大的数


    1,字符加法

    #include <stdio.h>
    #include <string.h>
    
    void reverse(char s[]) //反向遍历
    {
        int i;
        int len = strlen(s);
    
        for (i = 0; i < len / 2; i++)
        {
            s[i] ^= s[len - i - 1];
            s[len - i - 1] ^= s[i];
            s[i] ^= s[len - i - 1];
        }
    }
    
    void add_str(char sum[], char s1[], char s2[])//字符串数字相加
    {
        int len1 = strlen(s1);
        int len2 = strlen(s2);
        int len_max = len1 > len2 ? len1 : len2;//选取最大的作为循环长度
    
        reverse(s1);//切换高位和地位的位置
        reverse(s2);//切换高位和地位的位置
    
        int i;
        int digit, carry;//digit是存储当前位数相加的值
        for (i = 0, digit = 0; i < len_max; i++, digit = 0)
        {
            if (s1[i] != '')    
                digit += s1[i] - '0';//变成数字
            if (s2[i] != '')    
                digit += s2[i] - '0';//变成数字
    
            digit += sum[i];     //把上次的进位加上
    
            sum[i] = digit % 10;//当前数字
            carry = digit / 10;//进位
            if (carry != 0)
                sum[i + 1] = carry;//把进位加到下一个位中
    
            sum[i] += '0';//变成字符
        }
    
        if (sum[i] != '')
            sum[i] += '0';//最后看是否有进位,有的话就加上,比如1000+9000的10000结果就是
    
        reverse(sum);
    }
    
    int main(void)
    {
        char s1[31] = { 0 };
        char s2[31] = { 0 }; 
        char sum[32] = { 0 };
    
        printf("input num1: ");
        gets(s1);
        printf("input num2: ");
        gets(s2);
    
        add_str(sum, s1, s2);
    
        printf("the sum is: %s
    ", sum);
    
        return 0;
    }

    结果:

    will@will-Inspiron-N4010:~/c/4th$ ./a.out
    input num1: 1234
    input num2: 9899
    the sum is: 11133

    2,字符串操作函数编写

    #include <stdio.h>
    
    int my_strlen(char s[])
    {
        int i = 0;
    
        while (s[i] != '')
            i++;
    
        return i;
    }
    
    void my_strcpy(char dst[], char src[])
    {
        int i = 0, j = 0;
    
        while ((dst[i++] = src[j++]) != '')
            ;
    }
    
    void my_strcat(char dst[], char src[])
    {
        int i = 0, j = 0;
    
        while (dst[i] != '')
            i++;
    
        while ((dst[i++] = src[j++]) != '')
            ;
    }
    
    int my_strcmp(char s1[], char s2[])
    {
        int i = 0, j = 0;
    
        while (s1[i] == s2[j] && s1[i] != '')
            i++, j++;
    
        return s1[i] - s2[j];
    }
    
    int my_strchr(char s[], int ch)
    {
        int i;
    
        for (i = 0; s[i] != ''; i++)
        {
            if (ch == s[i])    
                return i;
        }
    
        return -1;
    }
    
    int my_strstr(char s[], char substr[])
    {
        int i = 0, j;
        int start_cmp;
    
        while (s[i] != '')
        {
            start_cmp = i, j = 0;
            while (s[i] == substr[j] && substr[j] != '')    
                i++, j++;
    
            if (substr[j] == '')
                return start_cmp;
    
            i = start_cmp;
            i++;
        }
    
        return -1;
    }
    
    int main(void)
    {
        char s1[128];
        char s2[128];
    
        printf("test strlen, input s1:");
        gets(s1);
        printf("len of s1 is %d
    ", my_strlen(s1));
    
        printf("test strcpy, input s1: ");
        gets(s1);
        my_strcpy(s2, s1);
        printf("s2: %s
    ", s2);
    
        printf("test strcat, input s1: ");
        gets(s1);
        my_strcat(s2, s1);
        printf("s2: %s
    ", s2);
    
        printf("test strcmp, input s1: ");
        gets(s1);
        printf("test strcmp, input s2: ");
        gets(s2);
        if (strcmp(s1, s2) > 0)
            printf("%s > %s
    ", s1, s2);
        else if (strcmp(s1, s2) < 0)
            printf("%s < %s
    ", s1, s2);
        else
            printf("%s == %s
    ", s1, s2);
    
        int ch, index;
        printf("test strchr, input s1: ");
        gets(s1);
        printf("input ch: ");
        ch = getchar();
        if ((index = my_strchr(s1, ch)) != -1)
            printf("%s has %c, index = %d
    ", s1, ch, index);
        else
            printf("not find.
    ");
    
        while (getchar() != '
    ')
            ;
    
        printf("test strstr, input s1: ");
        gets(s1);
        printf("input s2: ");
        gets(s2);
        if ((index = my_strstr(s1, s2)) != -1)
            printf("%s has %s, index = %d
    ", s1, s2, index);
        else
            printf("not find.
    ");
    
        return 0;
    }

    3,查找第二个最大的

    #include <stdio.h>
    
    void rand_a(int a[], int len)
    {
        int i;
        for (i = 0; i < len; i++)
            a[i] = rand() % 100;
    }
    
    void print_a(int a[], int len)
    {
        int i;
        for (i = 0; i < len; i++)
            printf("%d ", a[i]);
        putchar('
    ');
    }
    
    int second_max(int a[], int len)
    {
        int i, max = a[0], min = a[0];
    
        for (i = 0; i < len; i++)
        {
            if (a[i] > max)    
                max = a[i];
            if (a[i] < min)
                min = a[i];
        }
    
        int sec_max = min;
        for (i = 0; i < len; i++)
        {
            if (sec_max < a[i] && a[i] < max)    
                sec_max = a[i];
        }
    
        return sec_max;
    }
    
    int main(void)
    {
        int a[10];
    
        rand_a(a, 10);
        print_a(a, 10);
    
        printf("second max is %d
    ", second_max(a, 10));
    
        return 0;
    }

    这个太简单我就不说了

  • 相关阅读:
    JavaScript循环 — for、for/in、while、do/while
    Git
    js根据日期获取所在周
    nodejs安装 Later version of Node.js is already installed. Setup will now exit 及 node与npm版本不符
    sqlserver 2014 json
    根据官方数据制作中国省市区数据库
    kubernetes系列③:集群升级-实践(参照官方文档)
    kubernetes系列:服务外部访问集中管理组件-ingress-nginx
    kubernetes系列-部署篇:Kubernetes的包管理工具-helm
    kubernetes系列-部署篇:使用kubeadm初始化一个高可用的Kubernetes集群
  • 原文地址:https://www.cnblogs.com/will-boot/p/3301153.html
Copyright © 2020-2023  润新知