zoukankan      html  css  js  c++  java
  • c语言提高(第二次作业)

    1. 画出字符串一级指针内存四区模型
    #include <stdio.h>
    #include <string.h>

    int main(void)
    {
    char buf[20]= "aaaa";
    char buf2[] = "bbbb";
    char *p1 = "111111";
    char *p2 = malloc(100);

    strcpy(p2, "3333");

    return 0;
    }

    2. 有一个字符串开头或结尾含有n个空格 (” abcdefgdddd ”),欲去掉前后空格,返回一个新字符串。
    要求1:请自己定义一个接口(函数),并实现功能;
    要求2:编写测试用例。

    功能:获取非空字符串
    参数:inbuf:原始字符串buf首地址
    outbuf:非空字符串buf首地址
    返回值:
    成功:0
    失败:非0
    int trimSpace(char *inbuf, char *outbuf);{
    if(inbuf==NULL||outbuf==NULL)
    return -1;
    char *p = inbuf;
    int begin=0;//字符串的第一个元素
    int end =strlen(inbuf)-1;//字符串最后一个元素的位置
    int n=0;
    
    if(end<0)//出错处理
    return -2;
    //从左往右移动,如果当前字符为空,而且没有结束
    while (p[begin] == ' ' && p[begin] != 0)
    {
    begin++; //位置从右移动一位
    }
    
    //从右往左移动,如果当前字符为空
    while (p[end] == ' ' && end > 0)
    {
    end--; //往左移动
    }
    
    if (end == 0)
    {
    return -2;
    }
    
    n = end - begin + 1; //非空元素个数
    
    strncpy(outbuf, p + begin, n);
    outbuf[n] = 0;
    
    return 0;
    }

    3. 有一个字符串“1a2b3d4z”;
    要求写一个函数实现如下功能:
    功能1:把偶数位字符挑选出来,组成一个字符串1。
    功能2:把奇数位字符挑选出来,组成一个字符串2。
    功能3:把字符串1和字符串2,通过函数参数,传送给main,并打印。
    功能4:主函数能测试通过。
    int getStr1Str2(char *source, char *buf1, char *buf2);

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    /*
    有一个字符串“1a2b3d4z”;
    要求写一个函数实现如下功能:
    功能1:把偶数位字符挑选出来,组成一个字符串1。
    功能2:把奇数位字符挑选出来,组成一个字符串2。
    功能3:把字符串1和字符串2,通过函数参数,传送给main,并打印。
    功能4:主函数能测试通过。

    */

    int getStr1Str2(char *source, char *buf1, char *buf2) {
    if (source == NULL || buf1 == NULL || buf2 == NULL)
    return -1;
    int n = strlen(source);//字符串长度
    int i = 0;
    for (; i < n; i++) {
    //如果是奇数位
    if (i % 2 != 0) {
    *buf1 = source[i];//*(source+i)
    buf1++;
    }
    //如果是偶数位
    else {
    *buf2++ = source[i];
    }
    }
    
    
    return 0;
    }
    int main() {
    char p[] = "1a2b3d4z";
    char buf1[50] = { 0 };
    char buf2[50] = { 0 };
    int ret = 0;
    
    ret = getStr1Str2(p, buf1, buf2);
    if (ret != 0) {
    printf("getStr1Str2 err:%d
    ", ret);
    
    return ret;
    }
    printf("buf1=%s
    ", buf1);
    printf("buf2=%s
    ", buf2);
    
    printf("
    ");
    system("pause");
    return 0;
    }

    4. 键值对(“key = value”)字符串,在开发中经常使用
    要求1:请自己定义一个接口,实现根据key获取.
    要求2:编写测试用例。
    要求3:键值对中间可能有n多空格,请去除空格

    注意:键值对字符串格式可能如下:
    "key1 = value1"
    "key2 = value2"
    "key3 = value3"
    "key4 = value4"
    "key5 = "
    "key6 ="

    int getKeyByValue(char *keyvaluebuf, char *keybuf, char *valuebuf, int * valuebuflen);

    int main(void)
    {
    //...
    getKeyByValude("key1 = valude1", "key1", buf, &len);
    //...

    return 0;
    }

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<string.h>
    int trimSpace(char *inbuf, char *outbuf){
        if (inbuf == NULL || outbuf == NULL)
            return -1;
        char *p = inbuf;
        int begin = 0;//字符串的第一个元素
        int end = strlen(inbuf) - 1;//字符串最后一个元素的位置
        int n = 0;
    
        if (end<0)//出错处理
            return -2;
        //从左往右移动,如果当前字符为空,而且没有结束
        while (p[begin] == ' ' && p[begin] != 0)
        {
            begin++; //位置从右移动一位
        }
    
        //从右往左移动,如果当前字符为空
        while (p[end] == ' ' && end > 0)
        {
            end--; //往左移动
        }
    
        if (end == 0)
        {
            return -2;
        }
    
        n = end - begin + 1; //非空元素个数
    
        strncpy(outbuf, p + begin, n);
        outbuf[n] = 0;
    
        return 0;
    }
    int getKeyByValue(char *keyvaluebuf, char *keybuf, char *valuebuf, int *valuebuflen) {
        /*
        keyvaluebuf="key4                =value4";
        keybuf="key4";
    
        */
    
        if (keybuf == NULL || keyvaluebuf == NULL || valuebuf == NULL || valuebuflen == NULL)
        {
            return -1;
        }
        char *p = NULL;
        int ret = 0;
        //查找匹配键值
        //"key4=      value4"找key4,找到返回首地址
        p = strstr(keyvaluebuf, keybuf);
        if (p == NULL) {
            return -2;
        }
        //如果找到,重新设置起点位置,跳过“key4”
        //p="=     value4"
        //"key4=      value4"->"=     value4"
        p = p + strlen(keybuf);
        //查找=
        p = strstr(p, "=");
        if (p == NULL) {
            return -3;
        }
    
        //如果找到,重新设置起点位置,跳过“=”
        //p="     value4"
        //"=      value4"->"=     value4"
        p = p + strlen("=");
        //取非空字符
        ret = trimSpace(p, valuebuf);
        if (ret != 0)
        {
            printf("trimSpace err:%d
    ", ret);
            return ret;
        }
        //获取长度,通过*间接赋值
        *valuebuflen = strlen(valuebuf);
    
        return 0;
    }
    int main() {
        char keyVal[] = "key4               =value4";
        char key[] = "key4";
        char value[100] = { 0 };
        int len = 0;
        int ret = 0;
        
        ret = getKeyByValue(keyVal, key, value, &len);
        if (ret != 0) {
            printf("getKeyByValue err:%d
    ", ret);
    
            return ret;
        }
        printf("val:%s
    ", value);
        printf("len:%d
    ", len);
    
    #if 0
        char p[] = "1a2b3d4z";
        char buf1[50] = { 0 };
        char buf2[50] = { 0 };
        int ret = 0;
        
        ret = getStr1Str2(p, buf1, buf2); 
        if (ret != 0) {
            printf("getStr1Str2 err:%d
    ", ret);
    
            return ret;
        }
        printf("buf1=%s
    ", buf1);
        printf("buf2=%s
    ", buf2);
    #endif
        printf("
    ");
        system("pause");
        return 0;
    }
  • 相关阅读:
    和为S的连续正数序列
    数组中只出现一次的数字
    平衡二叉树
    二叉树的深度
    水仙花数
    数列求和
    数值统计
    奇数乘积
    求绝对值
    求两点的距离
  • 原文地址:https://www.cnblogs.com/zyqy/p/9443356.html
Copyright © 2011-2022 走看看