课下选做作业MyOD

2019-2020-1 20175227 《信息安全系统设计基础》

课下选做作业MyOD

要求

  • 复习c文件处理内容
  • 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
  • main与其他分开,制作静态库和动态库
  • 编写Makefile
  • 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
  • 在博客园发表一篇博客,重点写遇到的问题和解决过程

相关知识

  • Linux下od -tx -tc XXX的功能
    • 功能: od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。od命令系统默认的显示方式是八进制,名称源于Octal Dump。

常见的文件为文本文件和二进制文件。od命令主要用来查看保存在二进制文件中的值,按照指定格式解释文件中的数据并输出,不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。

大家也可以了解一下hexdump命令,以十六进制输出,但感觉hexdump命令美誉od命令强大。

2.命令格式

od [<选项><参数>] [<文件名>]

  • 参数:
参数 功能说明
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
sort -n -k 2 -t'-' date      // -t<分隔字符>   指定排序时所用的栏位分隔字符。  -k  选择以哪个区间进行排序
  • split方法:一个String类的数组以regex传入的分隔符为标准,对字符串进行分隔,使用时分隔符要放在双括号中。

课下选做作业MyOD

代码实现

  • 伪代码
将字符串数组tosort用“:”分隔,以第二列数值大小为标准从小到大排列:
创建整型数组a,长度与tosort长度相同
调用split函数将tosort数组以:(冒号)为分隔符分成小字符串
将每一个tosort元素的第二例列数值存入数组a中
调用Arrays类的sort函数对a进行排序
输出排序后的结果
  • 产品代码
/**
 * @author 20175227 Xueying Zhang
 * @date 2019/5/19 11:44.
 */
import java.util.*;

public class MySort {
    public static void main(String [] args) {
        String [] toSort = {
                "aaa:10:1:1",
                "ccc:30:3:4",
                "bbb:50:4:5",
                "ddd:20:5:3",
                "eee:40:2:20"};

        System.out.println("Before sort:");//输出排序前字符串数组
        for (String str: toSort)
            System.out.println(str);

        int [] a=new int[toSort.length];
        for(int i=0;i<toSort.length;i++){//对toSort每一个元素用split进行划分,并储存进字符串数组list中
            String [] list=toSort[i].split(":");
            a[i]=Integer.parseInt(list[1]);//将list中第二个元素,即toSort中第二列元素存进a中
        }
        Arrays.sort(a);

        System.out.println("After sort:");
        for (int i = 0; i < a.length; i++)//对a中每个元素
            for (int j = 0; j < toSort.length; j++)//在toSort中每一个元素的第二列中比较
                if (a[i] == Integer.parseInt((toSort[j].split(":"))[1]))//如果二者相等
                    System.out.println(toSort[j]);//就输出该项元素
    }
    public static int StringTest1(String str){
        int  a;
            String [] list=str.split(":");
            a=Integer.parseInt(list[1]);//将list中第二个元素,即toSort中第二列元素存进a中
        return a;
    }
    public static int[] StringTest2(String[] toSort){
        int [] a=new int[toSort.length];
        for(int i=0;i<toSort.length;i++){//对toSort每一个元素用split进行划分,并储存进字符串数组list中
            String [] list=toSort[i].split(":");
            a[i]=Integer.parseInt(list[1]);//将list中第二个元素,即toSort中第二列元素存进a中
        }
        Arrays.sort(a);
        return a;
    }
}
  • 测试代码
import junit.framework.TestCase;
import org.junit.Test;

public class MySortTest extends TestCase {
    String [] toSort = {
            "aaa:10:1:1",
            "ccc:30:3:4",
            "bbb:50:4:5",
            "ddd:20:5:3",
            "eee:40:2:20"};
    @Test
    public void testl() {
        assertEquals(10,MySort.StringTest1("aaa:10:1:1"));
    }
    public void test2() {
        assertEquals(20,MySort.StringTest2(toSort)[1]);
    }
}

运行示例

  • 产品代码运行结果

课下选做作业MyOD

  • 测试结果

课下选做作业MyOD

代码托管

MySort.java

参考资料

  • https://www.cnblogs.com/fulucky/p/8022718.html
  • https://www.cnblogs.com/fyss/p/9065173.html
上一篇:第二周测试补交-myod


下一篇:课后选做题-MyOD