查看: 611|回复: 2

[原创图文] 逆向学习第14天_字符数组代码练习及多种冒泡排序法

[复制链接]

17

主题

32

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
244
荣耀
0
rank
0
违规
0
发表于 2020-10-28 09:28:04 | 显示全部楼层 |阅读模式
本帖最后由 Guido 于 2020-11-10 10:00 编辑

1.編写以下函数,求字符串数组的长度:
int StringLength(char str[])
#include<stdio.h>
int StringLength(char str[])
{
        int i = 0;
        while (str)
        {
                i++;
        }
        return i;
}
int main()
{
        char s[32];
        int a;
        printf("请输入一组少于31个字符的字符串\n");
        scanf_s("%s", s, sizeof(s));                    //这里一定要用%s控制符,这样才能表示连续输入一串,刚开始自己用了%c出错了
        a=StringLength(s);
        printf("%d", a);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

2.编写以下函数,将字符串在数组内反序:
void Reverse(char str[])
#include<stdio.h>
void Reverse(char str[])
{
        int i=0;
        int j=0;
        char c;
        while (str) //先计算数组中的元素个数,不包括\0
        {
                i++;
        }
        while (--i>j)      //  1 2 3 4 5    
        {
                c = str[j];
                str[j] = str;
                str = c;
                j++;
        }
}
int main()
{
        char s[32];
        scanf_s("%s", s, sizeof(s));
        Reverse(s);
        puts(s);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

3.编写以下函数,将字符串数组内的所有小写字母转为大写:
void StringUpper(char str[])
#include<stdio.h>
void StringUpper(char str[])
{
        int i = 0;
        while (str)
        {
                i++;
        }
        while (i--)
        {
                if (str >= 'a'&&str <= 'z')
                {
                        str -= ('a' - 'A');
                }
        }
}
int main()
{
        char s[32];
        scanf_s("%s", s, sizeof(s));
        StringUpper(s);
        puts(s);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

4.编写以下函数,将带入的n个数组元素按从小到大排序:。
void Sort(int array[],int n)

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

#include<stdio.h>
#include<stdlib.h>
void Sort(int s[], int len)
{
        int j = 0;
        int t;
        while (--len)
        {
                j = 0;
                while (j<len)
                {
                        if (s[j] > s[j + 1])
                        {
                                t = s[j];
                                s[j] = s[j + 1];
                                s[j + 1] = t;
                        }
                        j++;
                }
        }
}
int main()
{
        int a[10] = {1,3,2,4,5,0,123,3,0,9};
        int len=_countof(a);
        Sort(a,len);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

//由小到大排列,从右边推到左边
#include<stdio.h>
void sort2(int p[], int nLen)
{
        int i = 0;
        int t = 0;
        int j = nLen-1;
        int k = -1;
        while (j)   
        {
                i = nLen-1;
                ++k;                //设置k是为了限制内层循环的次数
                while (i>k)  //内存循环
                {
                        if (p < p[i - 1])
                        {
                                t = p;
                                p = p[i - 1];
                                p[i - 1] = t;
                        }
                        i--;
                }
                j--;
        }
}
int main()
{
        int a[] = { 9,8,7,6,5,4,3,2,1,0 };
        int b = 10;
        sort2(a, b);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

5.编写4种置泡排序函数,使用数组作参数:分别将最大值最小值推回头部或尾部。
(在main函数或全局区定义一个数组,作为实际参数调用4种排序函数进行测试)
注意:数组在做实际参数时,在被调函数中不能通过sizeof或者countof来测量元素个数;
因此,每个排序函数中要将数组的元素个数通过参数传递到被调函数;
例如:
void sort1(int p[],int nLen)
void sort2(int p[],int nLen)
void sort3(int p[],int nLen)
void sort4(int p[],int nLen)
.......
//由小到大排列,从左边推到右边
#include<stdio.h>
void sort1(int p[], int nLen)
{
        int i = 0;
        int t = 0;
        while (--nLen)   //外层循环一定要先自身减减,因为数组下标是从0开始的
        {
                i = 0;
                while (i < nLen)  //内存循环
                {
                        if (p > p[i + 1])
                        {
                                t = p;
                                p = p[i + 1];
                                p[i + 1] = t;
                        }
                        i++;
                }
        }
}
int main()
{
        int a[] = { 9,9,7,6,5,4,3,2,1,0 };
        int b = 10;
        sort1(a, b);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

//由大到小排列,从左边推到右边
#include<stdio.h>
void sort1(int p[], int nLen)
{
        int i = 0;
        int t = 0;
        while (--nLen)   //外层循环一定要先自身减减,因为数组下标是从0开始的
        {
                i = 0;
                while (i < nLen)  //内存循环
                {
                        if (p < p[i + 1])
                        {
                                t = p;
                                p = p[i + 1];
                                p[i + 1] = t;
                        }
                        i++;
                }
        }
}
int main()
{
        int a[] = { 0,1,2,3,4,5,6,7,8,9 };
        int b = 10;
        sort1(a, b);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

//由大到小排列,从右边推到左边
#include<stdio.h>
void sort2(int p[], int nLen)
{
        int i = 0;
        int t = 0;
        int j = nLen-1;
        int k = -1;
        while (j)   
        {
                i = nLen-1;
                ++k;                //设置k是为了限制内层循环的次数
                while (i>k)  //内存循环
                {
                        if (p > p[i - 1])
                        {
                                t = p;
                                p = p[i - 1];
                                p[i - 1] = t;
                        }
                        i--;
                }
                j--;
        }
}
int main()
{
        int a[] = { 0,1,2,3,4,5,6,7,8,9 };
        int b = 10;
        sort2(a, b);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

6.编写一个函数在字符串内查找一个字符:
int StringFind(char str[],char c)
查找不到就返回-1:
查找到学符串内包含这个字符,返回的是0到n的数字。
代表这个学符距离字符串头的相对位置,如果字符串第一个元素就是要查找的字符返回0。
在main函数中定义一个学符串数组,输入一些文学后调用查找函数测试。
//查找某一个字符串中是否包含某个字符,存在则返回所在位置,不存在这返回-1
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int StringFind(char str[], char c)
{
        int i = 0;
        while (str)
        {
                if (str == c)
                {
                        printf("\n%c在字符串%s中的位置为%d", c, str, i);
                        return i;
                }
                i++;
        }
        return -1;
}
int main()
{
        char str[32];
        char c;
        int a;
        printf("请输入小于32个字符的字符串\n");
        scanf_s("%s", str, sizeof(str));
        printf("请输入想要查找的字符\n");
        fflush(stdin);
        c = getchar();
        a=StringFind(str, c);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

7.编写函数:
void StringUpper(char str[])
void StringLower(char str[])
在main函数中定义一个字符串数组,输入一些文字后调以上两个函数:
将实际参数内的文字全部变成大写或者小写。
#include<stdio.h>
void StringLower(char str[])
{
        int i = 0;
        while (str)
        {
                i++;
        }
        while (i--)
        {
                if (str >= 'A'&&str <= 'Z')
                {
                        str += ('a' - 'A');
                }
        }
}
int main()
{
        char s[32];
        scanf_s("%s", s, sizeof(s));
        StringLower (s);
        puts(s);
        return 0;
}

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

8.阅读翻译以下字符串操作函数,
strlen

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

strcpy

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

strcat

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

strcmp

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

strstr

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

strtok

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

strupr

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

strlwr

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

strchr

逆向学习第14天_字符数组代码练习及多种冒泡排序法

逆向学习第14天_字符数组代码练习及多种冒泡排序法

仔细测试这些函数的功能,思考自己能否编写代码实现以上函数的功能。

















温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
发表于 2020-10-28 14:46:42 | 显示全部楼层
第三条格式出问题了,你看一下代码

点评

好的好的,改过来啦  详情 回复 发表于 2020-10-28 20:21
论坛交流群:672619046

17

主题

32

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
244
荣耀
0
rank
0
违规
0
 楼主| 发表于 2020-10-28 20:21:00 | 显示全部楼层
roger 发表于 2020-10-28 14:46
第三条格式出问题了,你看一下代码

好的好的,改过来啦
学逆向论坛-免费的逆向学习论坛
微信公众号
快速回复 返回顶部 返回列表