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\n", ret);

return ret;
}
printf("buf1=%s\n", buf1);
printf("buf2=%s\n", buf2);

printf("\n");
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\n", 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\n", ret);

        return ret;
    }
    printf("val:%s\n", value);
    printf("len:%d\n", 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\n", ret);

        return ret;
    }
    printf("buf1=%s\n", buf1);
    printf("buf2=%s\n", buf2);
#endif
    printf("\n");
    system("pause");
    return 0;
}

 

posted @ 2018-08-08 15:57  砍柴人Ryan  阅读(321)  评论(0编辑  收藏  举报