• 【Educoder作业】C&C++指针实训


    【Educoder作业】C&C++指针实训

    不是很熟练,之前从来没用过,讲解不到位恕罪。

    T1 去掉字符串首尾空格

    我们需要知道两个事情,第一个事情是在函数中引用了数组指针之后,在函数内部就可以当做一个正常数组使用;第二个事情是字符串的末尾是用一个’\0收尾的,所以我们在去掉末尾的空格时,在非空格后面加一个’\0’即可。

    #include 
    using namespace std;
    
    
    char * trim(char * str);
    
    int main()
    {
        char s[1024];     // 定义存储字符串的一维字符数组
        // 输入一行字符,可以包含空格
        // 输入的字符串存入s中,最多读取个字符,后面自动加上'\0'
        cin.getline(s,1024);
        cout << trim(s) << endl;     // 输出去掉首尾空格后的字符串
        return 0;
    }
    
    // 函数trim:去掉字符串首尾空格
    // 参数:str-字符指针,指向输入的字符串
    // 返回值:字符指针,指向去掉首尾空格后的字符串(首地址)
    // 提示:可以直接在字符串str中操作
    char * trim(char * str)
    {
        // 请在此添加代码,实现函数trim
        /********** Begin *********/
    	int l = 0;
    	char *ptr = str;
    	while (*ptr != '\0') {
            ptr ++ , l ++ ;
        }
    	int bg;
    	for (int i = 0; i < l; i ++ ) if (str[i] != ' ') {
    		bg = i;
    		break;
        }
    	for (int i = l - 1; ~i; i -- ) if (str[i] != ' ') {
            str[i + 1] = '\0';
            break;
        }
    	return &str[bg];
        
        /********** End **********/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    T2 用指针实现pswap函数

    就是指针的简单应用而已,注意传的时候是传地址进去即可。

    #include 
    using namespace std;
    
    void pswap(int * p, int *q);
    
    int main()
    {
        int a, b;
        cin >> a >> b;     // 输入两个整数
        pswap(&a,&b);     // 调用pswap函数,交换a、b的值
        cout << a << " " << b << endl;     // 输出a、b的值
        return 0;
    }
    
    //函数pswap:交换指针p和q指向的单元中的整数值
    //参数:p,q-int类型指针,指向要交换的整数
    void pswap(int * p, int *q)
    {
        // 请在此添加代码,实现函数pswap
        /********** Begin *********/
        int tmp = *p;
        *p = *q;
        *q = tmp;
        
        
        /********** End **********/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    T3 选出串中的数字

    弄一个 f l a g flag flag判断一下即可,另外我们用’\0’判断字符串末尾。

    #include 
    using namespace std;
    
    void extractNum(char * str);
    
    int main()
    {
        char s[1024];
        cin.getline(s,1024);     // 输入一行字符
        extractNum(s);     // 调用extractNum函数,选出数字
        cout<<s<<endl;     // 输出选出的数字
        return 0;
    }
    
    // 函数extractNum:选出str指向的字符串中的数字,并写回str
    // 参数:str-指向字符串
    void extractNum(char * str)
    {
        // 请在此添加代码,实现函数extractNum
        /********** Begin *********/
        char *p = str, *q = str;
    	bool flag = false;
    	while (*q != '\0') {
            if (!flag && *q == '-') {
                *p = '-';
                p ++ ;
                flag = true;
            }
            else if (*q >= '0' && *q <= '9') {
                *p = *q;
                p ++ ;
                flag = true;
            }
            q ++ ;
    	}
        *p = '\0';
        
        
        /********** End **********/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    T4 大写字母好看

    #include 
    using namespace std;
    
    void toUp(char * str);
    
    int main()
    {
        char s[1024];
        cin.getline(s,1024);     // 输入一行字符
        toUp(s);     // 调用toUp函数,转换成大写字母
        cout<<s<<endl;     // 输出变更后的新字符串
        return 0;
    }
    
    // 函数toUp:将str指向的字符串中的小写字母变成对应的大写字母
    // 参数:str-指向字符串
    void toUp(char * str)
    {
        // 请在此添加代码,实现函数toUp
        /********** Begin *********/
        char *ptr = str;
        while (*ptr != '\0') {
            if (*ptr >= 'a' && *ptr <= 'z') *ptr -= 32;
            ptr ++ ;
        }
        
        
        /********** End **********/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    T5 子串出现的次数

    从头开始遍历一遍即可。

    // 包含字符串函数库
    #include 
    #include 
    using namespace std;
    
    int frequency(char * substr, char * str);
    
    int main()
    {
        char sub[128],str[1024];
        cin.getline(sub,128);     // 输入子串
        cin.getline(str,1024);     // 输入长串
        int n = frequency(sub,str);     // 调用frequency函数,计算子串在长串中出现的次数
        cout<<n<<endl;     // 输出次数
        return 0;
    }
    
    // 函数frequency:计算子串在长串中出现的次数
    // 参数:substr-指向子串,str-指向长串
    // 返回值:出现的次数
    int frequency(char * substr, char * str)
    {
        // 请在此添加代码,实现函数frequency
        /********** Begin *********/
        int l1 = strlen(str), l2 = strlen(substr);
        int ans = 0, i = 0;
    	while (i <= l1 - l2) {
            bool flag = true;
            for (int j = 0; j < l2; j ++ ) if (str[i + j] != substr[j]) flag = false;
    		if(flag) i += l2, ans ++ ;
    		else i ++ ;
        }
        return ans;
        /********** End **********/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    T6 字符串的部分复制

    T 5 T5 T5类似,注意不要越界导致 R u n t i m e E r r o r RuntimeError RuntimeError即可。

    #include 
    #include 
    using namespace std;
    
    void strmncpy(char *s, int m, int n, char *t);
    
    int main()
    {
        char s[128],t[128];
        int m,n;
        cin>>s;     // 输入源串
        cin>>m>>n;     // 输入m和n
        strmncpy(s, m, n, t);     // 字符串复制
        cout << t <<endl;     // 输出复制结果
        return 0;
    }
    
    // 函数strmncpy:字符串的部分复制,将s指向字符串从第m个字符开始的n个字符复制的t中
    // 参数:s-指向源字符串,t-指向目标字符串,m-起始位置,n-字符个数
    // 返回值:无
    void strmncpy(char *s, int m, int n, char *t)
    {
        // 请在此添加代码,实现函数strmncpy
        /********** Begin *********/
        int l = strlen(s);
    	if (l < m) {
    		t[0] = '\0';
    		return;
    	}
    	n = min(n, l - m);
    	for (int i = 0; i < n; i ++ ) t[i] = s[i + m];
        t[n] = '\0';
        
        /********** End **********/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    前后端分离计算机毕设项目之基于Java+springboot+vue的智能停车计费系统设计与实现(内含源码+文档+教程)
    深入理解HTTPS协议原理
    超详细Python教程——作用域
    pytorch中的Dataloader和dataset详细的collate_fn参数测试
    MongoDB语言命令
    STM32 EtherCAT 总线型(1 拖 4)步进电机解决方案
    Vue2.0 瞧一下vm.$mount()
    这个苦逼的通信人,有点像我啊......
    Scapy样例三则
    MCSM面板搭建教程和我的世界Paper服务器开服教程
  • 原文地址:https://blog.csdn.net/JZYshuraK/article/details/127881090