20190723_C的三个小实现
1. 有一个字符串开头或结尾含有n个空格(“ abcdefgdddd ”),欲去掉前后的空格,返回一个新的字符串。
a) 要求1:请自己定义一个接口(函数),并实现功能;
b) 要求2:编写测试用例。
c) 函数: int trimSpace(char * inbuf, char * outbuf);
. 有一个字符串开头或结尾含有n个空格(“ abcdefgdddd ”),欲去掉前后的空格,返回一个新的字符串。
a) 要求1:请自己定义一个接口(函数),并实现功能;
b) 要求2:编写测试用例。
c) 函数: int trimSpace(char * inbuf, char * outbuf); //API函数
#include <stdlib.h>
#include <string.h>
#include <stdio.h> #pragma warning(disable:4996) /*
子业务函数api
*/ int trimSpace(char* string_input_trim, char* string_output_trim)
{
//判断 业务函数 形参是否为 Null
int returnTrim = ; if (string_input_trim == NULL || string_output_trim == NULL)
{
returnTrim = -; printf("trimSpace error: %d in (string_input_trim == NULL || string_output_trim == NULL)\n", returnTrim); return returnTrim;
} //在被调用函数中,定义辅助指针 * 变量,把形参接过来,不要轻易改变被调用函数中的形参值
char* s_i_t = string_input_trim;
char* s_o_t = string_output_trim; char* space_cut = ' ';
int i = ;
int j = ; //裁剪函数,核心算法
//while (s_i_t = strstr(s_i_t, space_cut))
//{ //}
for (i = ; i < strlen(s_i_t); i++)
{
if (*(s_i_t + i) != ' ')
{
*(s_o_t + j) = *(s_i_t +i);
j++;
}
else
{
continue;
} } //这个功能是可以实现的
//for(i = 0; i < strlen(s_i_t); i++)
//{
// printf("%c\n", *(s_i_t + i));
//} *(s_o_t + j) = '\0'; printf("%s\n", s_i_t);
printf("%s\n", s_o_t); //返回值
return returnTrim;
} int main_hw01()
{ int returnMain = ; char* string_input_main = " abcdefgdddd ";
char* string_output_main = (char*)malloc(); //这个功能是可以实现的
/*for (int i = 0; i < strlen(string_input_main); i++)
{
printf("%c", *(string_input_main + i));
}*/ //returnMain = clientAPI(string_input_main, string_output_main);
returnMain = trimSpace(string_input_main, string_output_main); if (returnMain != )
{
printf("clientAPI error: %d\n", returnMain);
}
else
{
printf("string after trimming: %s\n", string_output_main);
} system("pause");
return returnMain;
}
2. 有一个字符串 “1a2b3d4z”:
要求写一个函数实现如下功能
a) 把偶数位字符挑出来,组成一个字符串1。
b) 把奇数位字符挑出来,组成一个字符串2。
c) 把字符串1和字符串2,通过函数参数,传给main,并打印。
d) 函数:getStr1Str2(char *source, char* buf1, char *buf2);
//API函数
#include <stdlib.h>
#include <string.h>
#include <stdio.h> #pragma warning(disable:4996) /*
API 函数区
*/
//int clientAPI(char * main, char * buf)
int getStr1Str2(char* get_string, char* odd_string, char* even_string)
{
/*
形参判断区,定义返回变量
*/
int getReturnValue = ; if (get_string == NULL || odd_string == NULL || even_string == NULL)
{
getReturnValue = -; printf("trimSpace error: %d in (string_input_trim == NULL || \
string_output_trim == NULL)\n", getReturnValue); return getReturnValue;
} /*
辅助指针区
在被调用函数中,定义辅助指针 * 变量,
把形参接过来,不要轻易改变被调用函数中的形参值
*/
char* gs = get_string;
char* os = odd_string;
char* es = even_string; /*
算法区
*/
int i;
int e_j = ;
int o_j = ; //for (i = 0; i < strlen(gs); i = i + 2)
//{
// *(es + e_j) = *(gs + i);
// e_j++;
//}
for (i = ; i < strlen(gs); i++)
{
if (i % == )
{
*(es + e_j) = *(gs + i);
e_j++;
}
else
{
*(os + o_j) = *(gs + i);
o_j++;
}
} *(es + e_j) = '\0';
*(os + o_j) = '\0'; /*
返回区
*/ return getReturnValue;
} /*
主函数区
*/
int main2019072301()
{
/*
参数区
*/
int returnMain = ; char* string_main = "1a2b3d4z";
//int string_length = sizeof(string_main); //char* string_odd[(const int)string_length];
//char* string_even[(const int)string_length];
char* string_odd = malloc();
char* string_even = malloc(); /*
函数调用区
*/
returnMain = getStr1Str2(string_main, string_odd, string_even); /*
返回区
*/
if (returnMain != )
{
printf("clientAPI error: %d\n", returnMain);
}
else
{
printf("even string: %s\n", string_even);
printf("odd string: %s\n", string_odd);
} system("pause");
return returnMain;
}
3. 键值对 (“key = value”) 字符串,在开发中经常使用;
a) 要求1:请自己定义一个接口,实现根据key获取valude。
b) 要求2:编写测试用例
c) 要求3:键值对中间可能有n多空格,请去除空格。
d) 注意:键值对字符串格式可能如下
i. “key1 = valude1”
ii. “key2 = valude2”
iii. “key3 = valude3”
iv. “key4 valude4”
v. “key5 = “
vi. “key6 = ”
vii. “key7 = “
e) 函数:int getKeyByValude(char* keyvaluebuf, char* keybuf, char* valuebuf, int* valuebuflen);
f) 例子:“ORACLE_name = itcast” “ORACLE_name” itcast “oracle_pwd=123456” “oracle_pwd” 123456 “oracle_pwd= 123456” “oracle_pwd” 123456
g) 函数例子 int main(){ getKeyByValude(“key1= valude1 “, “key1”, buf, &len)}
//API函数
#include <stdlib.h>
#include <string.h>
#include <stdio.h> #pragma warning(disable:4996) /*
API 函数区,专注算法
*/
//int clientAPI(char * main, char * buf)
int getKeyValue(char* getString, char* getKey,char* getValue, int* valueLength)
{
/*
形参判断区,定义返回变量
*/
int returnGetKeyValue = ;
if (getString == NULL || getKey == NULL || \
getValue == NULL || valueLength == NULL)
{
printf("error in (getString == NULL || getKey == NULL || \
getValue == NULL || valueLength == NULL) = %d", returnGetKeyValue);
returnGetKeyValue = -;
} /*
辅助指针区
在被调用函数中,定义辅助指针 * 变量,
把形参接过来,不要轻易改变被调用函数中的形参值
*/
char* gs = getString;
char* gk = getKey;
char* gv = getValue;
int* vl = valueLength; //strlen(gs) /*
算法区
*/
int i = ;
int j = ;
while (*gs != '\0')
{
printf("*gs = %c\n", *gs);
if (*gs == '=')
{
gs = gs + ;
break;
}
else if (*gs == ' ')
{
gs = gs + ;
continue;
}
else
{
*(gk + i) = *gs;
//gk++;
i++;
gs++;
}
} while (*gs != '\0')
{
printf("*gs = %c\n", *gs);
if (*gs == ' ')
{
gs = gs + ;
continue;
}
else
{
*(gv + j) = *gs;
//gv++;
j++;
gs++;
}
} *(gk + i) = '\0';
*(gv + j) = '\0'; /*
返回区
*/
printf("key = %s\n", gk);
printf("value = %s\n", gv); /*
key = key5
value = value12345
*/ return returnGetKeyValue;
} /*
API 函数区,专注输出,多参函数的调用,TBC
*/ int globalPrint(int sInfo, ...)
{
int returnGlobalPrintValue = ; return returnGlobalPrintValue;
} /*
主函数区
*/
int main()
{
/*
参数区
*/
int returnMain = ; char* string_main = "key5 = value12345 ";
char* string_key = malloc();
char* string_value = malloc();
int value_length = ;
value_length = strlen(string_main); /*
函数调用区
*/
returnMain = getKeyValue(string_main, string_key, string_value, &value_length); /*
返回区
*/
if(returnMain != )
{
printf("clientAPI error: %d\n", returnMain);
}
else
{ } system("pause");
return returnMain;
} int mainxxxx()
{
char* gs = "key5 = value12345 ";
char* gt = "key";
printf("strlen = %d\n", strlen(gs));
printf("sizeof = %d\n", sizeof(gs)); printf("%s\n", *(gt + strlen(gt)));
printf("%c\n", *(gt + strlen(gt)));
/* */ for (int i = ; i < strlen(gt); i++)
{
printf("%c\n", *(gt + i));
}
/*
trlen = 27
sizeof = 4
(null)
k
e
y
*/
for (int i = ; i < strlen(gt) + ; i++)
{
printf("%c\n", *(gt + i));
}
/*
k
e
y */ /*for (int i = 0; i < strlen(gt) + 1; i++)
{
printf("%s\n", *(gt + i));
}*/
/*
引发了异常: 读取访问权限冲突。
**it** 是 0x6B。 */ /*printf("%s\n", *(gt + 1));*/ //char* ptr = "abc";
//printf(ptr);
//printf("\n%c\n",*(ptr + 1));
//printf("\n%s\n",*(ptr + 1)); //引发了异常: 读取访问权限冲突。**it** 是 0x62。
char* gg = (char*)malloc();
//while (*gt != NULL)
//{
// *gg = *gt;
// gg++;
// gt++;
//} for (int i = ; i < strlen(gt) + ; i++)
{
*(gg + i) = *(gt + i);
}
//*gg++ = '\0';
printf("%s\n", gg); system("pause");
return ;
} int mainxxxc()
{
char* string = "key = 3";
for (int i = ; i < strlen(string); i++)
{
printf("%c\n", *(string + i));
}
/*
k
e
y = 3
*/ for (int i = ; i < strlen(string) + ; i++)
{
printf("%c\n", *(string + i));
}
/*
k
e
y = 3 */
char* k = (char*)malloc();
char* v = (char*)malloc();
for (int i = ; i < strlen(string) + ; i++)
{
if (*(string + i) == '=')
{
printf("found '='\n");
}
else
{
printf("not found '='\n");
}
} /*
not found '='
not found '='
not found '='
not found '='
found '='
not found '='
not found '='
not found '=' --> '\0'
*/ //char* string = "key = 3";
int j = ;
int i = ;
//for (i = 0; i < strlen(string); i++)
//{
// *(k + i) = *(string + i);
// if (*(string + i) == '=')
// {
// //for (; i < strlen(string); i++)
// //{
// // *(v + j) = *(string + i + 1);
// //}
// for (j = 0; j < strlen(string); j++)
// {
// *(v + j) = *(string + i + 1);
// i++;
// }
// } //} //for key
for (i = ; i < strlen(string); i++)
{
*(k + i) = *(string + i);
printf("%c\n", *(k + i));
//key is key
/*
k
e
y =
*/ if (*(string + i) == '=')
{
printf("x %c\n", *(string + i));
printf("y %c\n", *(string + i +));
string = string + i + ;
printf("%c\n", *string);
/*
x =
y */
break;
}
} for (j = ; j < strlen(string); j++)
{
printf("z %c\n", *string);
*(v + j) = *(string + j);
} /*
key is ke
value is
*/ *(k + i) = '\0';
*(v + j) = '\0'; printf("key is %s\n", k);
printf("value is %s\n", v); system("pause"); return ;
}
20190723_C的三个小实现的更多相关文章
- 一个div,包含三个小的div,平均分布的样式
从11月份开始,自学前端开发,写静态页面中,经常用到一个大的div下包含三个小的div,平均分布div大小样式,写过多次,也多次忘记,每次都要现找资料,不想之后,在这么麻烦,索性今天自己记录一下,方便 ...
- 《Mysql 公司职员学习篇》 第三章 小A的疑问
第三章 小A的疑问 ---- 数据类型和自增列 小A拿着鸡腿,回到了房间里面,咬了一嘴油,说:"我有2个疑问,在Excell里面,像列PetAge(宠物年龄)这样的数字,我一般会设置成数值 ...
- arduino新入手体验:三个小实验
新入手体验:三个小实验 一:一个LED闪烁 控制要求:1个LED灯,每隔50ms闪烁一次 实物连接图: 控制代码: //2018.6/11 ;//定义数字接口10,对应 void setup() { ...
- 【LibreOJ】#6392. 「THUPC2018」密码学第三次小作业 / Rsa 扩展欧几里得算法
[题目]#6392. 「THUPC2018」密码学第三次小作业 / Rsa [题意]T次询问,给定正整数c1,c2,e1,e2,N,求正整数m满足: \(c_1=m^{e_1} \ \ mod \ \ ...
- 关于微信小程序下拉出现三个小点
包子这天看美团外卖的小程序,再瞅瞅自己的背景色,发现,美团下拉的时候有三个小点,但是我自己的校车徐下拉的时候没有三个小点,很是郁闷,于是各种的找各种的找,发现,这三个小点是微信小程序自带的,你只需要设 ...
- mysql 使用的三个小技巧
mysql 使用的三个小技巧 快速阅读 Mysql查询工具中如何查询多条语名,Mysql中如何设置变量,Mysql中如何查特定字段,后面再加* Mysql查询工具中如何查询多条语名 默认myslq只能 ...
- 大div中,三个小div水平居中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HTML横向滚动条和文本超出显示三个小圆点
我们这次要说的就是:现在有很多的公司以及很多的app软件经常使用的两个方法横向滚动条和文本超出三个小圆点 横向滚动条:顾名思义嘛,就是能够一块内容可以横着滑动. 文本超出三个小圆点:文本超出就是当文本 ...
- 三个小项目入门Go语言|字节青训营笔记
前言 这是青训营的第一课,今天的课程比较快速的讲解了go语言的入门,并配合三个小的项目实践梳理所学知识点,这里详细回顾一下这三个项目,结合课后作业要求做一些代码补充,并附上自己的分析,青训期间的所有课 ...
随机推荐
- 快学Scala 第五课 (构造映射,获取映射值,更新映射值,迭代映射,与Java互操作)
构造映射: val score = Map[String, Int]() val score1 = HashMap[String, Int]() val value1 = Map[String, In ...
- raspbian修改swap分区为硬盘上的分区
一直以为raspbian的swap分区和平常装系统时候的swap分区是一样的,最近用u盘插在树莓派上运行后发现这个交换分区和我想象中不一样. 百度后发现它是一个文件挂上去的.直接搞把! pi@rasp ...
- 【百度地图】如何去掉百度LOGO
只需要一步就解决问题,在CSS里加入一段代码即可: .anchorBL{display:none;}
- echarts地图边界数据的实时获取与应用,省市区县多级联动【附最新geoJson文件下载】
首先,来看下效果图 在线体验地址:https://hxkj.vip/demo/echartsMap/,并提供实时geoJson数据文件下载 echarts官方社区链接地址(可在线编辑):https:/ ...
- 02-16 k近邻算法
目录 k近邻算法 一.k近邻算法学习目标 二.k近邻算法引入 三.k近邻算法详解 3.1 k近邻算法三要素 3.1.1 k值的选择 3.1.2 最近邻算法 3.1.3 距离度量的方式 3.1.4 分类 ...
- 我们一起学Python之——认识Python"规则"
前言: 开学后,跟预想的一样,开学第一天我们就开了Python,虽然之前早就预料到了,但对于一直学Java的我来说,内心还是有一些涟漪的.总归还是要接受的,还不如振作起来,认真对待.我决定从最简单并且 ...
- 想转行做程序员,是学习JAVA还是Python?哪个更好?
请大家务必审题,转行做程序员,是程序员,并非数据分析也不是软件测试. 首先声明:这是一篇容易引起撕逼的问答,为了祖国和谐,人民安康,请各位看官尽量理性讨论. 同时,这篇文章是面向一些初入行的朋友进行一 ...
- RegExp实现字符替换
将字符串组中的所有Paul替换成Ringo,g:执行全局匹配,查找所有匹配而非在找到第一个匹配后停止;\b:匹配单词边界,划分匹配字符的起始范围 <!DOCTYPE html> <h ...
- (19)ASP.NET Core EF创建模型(包含属性和排除属性、主键、生成的值)
1.什么是Fluent API? EF中内嵌的约定将POCO类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体映射到约定指示外的其他对象,所以Fluent API和注解都是一种方法,这两种方法 ...
- openssl之DH(Diffie–Hellman)加密
//加密机制初始化 g_HDMgr.init(); //对方的public key BIGNUM* peerPubKey = NULL; peerPubKey = BN_bin2bn((unsigne ...