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; }