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
int trimSpace(char *inbuf, char *outbuf);{
if(inbuf==NULL||outbuf==NULL)
return -;
char *p = inbuf;
int begin=;//字符串的第一个元素
int end =strlen(inbuf)-;//字符串最后一个元素的位置
int n=; if(end<)//出错处理
return -;
//从左往右移动,如果当前字符为空,而且没有结束
while (p[begin] == ' ' && p[begin] != )
{
begin++; //位置从右移动一位
} //从右往左移动,如果当前字符为空
while (p[end] == ' ' && end > )
{
end--; //往左移动
} if (end == )
{
return -;
} n = end - begin + ; //非空元素个数 strncpy(outbuf, p + begin, n);
outbuf[n] = ; return ;
}

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

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 -;
char *p = inbuf;
int begin = ;//字符串的第一个元素
int end = strlen(inbuf) - ;//字符串最后一个元素的位置
int n = ; if (end<)//出错处理
return -;
//从左往右移动,如果当前字符为空,而且没有结束
while (p[begin] == ' ' && p[begin] != )
{
begin++; //位置从右移动一位
} //从右往左移动,如果当前字符为空
while (p[end] == ' ' && end > )
{
end--; //往左移动
} if (end == )
{
return -;
} n = end - begin + ; //非空元素个数 strncpy(outbuf, p + begin, n);
outbuf[n] = ; return ;
}
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 -;
}
char *p = NULL;
int ret = ;
//查找匹配键值
//"key4= value4"找key4,找到返回首地址
p = strstr(keyvaluebuf, keybuf);
if (p == NULL) {
return -;
}
//如果找到,重新设置起点位置,跳过“key4”
//p="= value4"
//"key4= value4"->"= value4"
p = p + strlen(keybuf);
//查找=
p = strstr(p, "=");
if (p == NULL) {
return -;
} //如果找到,重新设置起点位置,跳过“=”
//p=" value4"
//"= value4"->"= value4"
p = p + strlen("=");
//取非空字符
ret = trimSpace(p, valuebuf);
if (ret != )
{
printf("trimSpace err:%d\n", ret);
return ret;
}
//获取长度,通过*间接赋值
*valuebuflen = strlen(valuebuf); return ;
}
int main() {
char keyVal[] = "key4 =value4";
char key[] = "key4";
char value[] = { };
int len = ;
int ret = ; ret = getKeyByValue(keyVal, key, value, &len);
if (ret != ) {
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[] = { };
char buf2[] = { };
int ret = ; ret = getStr1Str2(p, buf1, buf2);
if (ret != ) {
printf("getStr1Str2 err:%d\n", ret); return ret;
}
printf("buf1=%s\n", buf1);
printf("buf2=%s\n", buf2);
#endif
printf("\n");
system("pause");
return ;
}

c语言提高(第二次作业)的更多相关文章

  1. C语言程序设计第二次作业--顺序结构

    C语言程序设计第二次作业--顺序结构 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido ...

  2. C语言基础第二次作业

    PTA第一次作业 题目7-1  统计学生成绩 1.实验代码 #include<stdio.h> int main(void){ ,B=,C=,D=,E=,f; scanf("%d ...

  3. c语言:第二次作业,循环结构

    1.本章学习总结(2分) 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 循环相比分支和顺序结构难了许多,相对的来说我的c语言的基础比之前有提高,但是还是很多题想了很久也 ...

  4. C语言程序第二次作业

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...

  5. C 语言学习 第二次作业总结

    本次作业内容,主要有以下几点: 新建 coding 帐号,且使用 coding 上传本次作业的代码 Printf及条件判断语句的使用 作业总结 作业总结: 同学们开始渐入佳境,能够较为流畅的写出合理的 ...

  6. C语言程序设计第二次作业

    一.学习内容 掌握关系运算符.逻辑运算符.条件运算符 掌握常用数学函数的用法 if语句(单分支,双分支和多分支) 用switch语句实现多分支 理解多个if语句,if...else if... 和if ...

  7. C语言的第二次作业

    一.PTA实验作业 题目1. 计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.本题代码 #include<stdio.h> #include<math.h> int ...

  8. C语言程序设计第二次作业——顺序结构

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. 错误信息1: 错误原因:i和d位置错误 改正方法:i和d位置互换 错误信息2: 错误原因:\n后缺了一个" 改正方法:\n后加一个 ...

  9. C语言程序设计第二次作业—————顺序结构改

    1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido.h> int mian() { ...

  10. C语言程序设计第二次作业1

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...

随机推荐

  1. Java开发笔记(七十九)利用反射技术操作私有属性

    早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...

  2. Adapter刷新数据的坑

    adapter刷新数据的时候,要能够刷新成功,要保证每次刷新的时候都是改变数据源. 于是,我这样做了,在适配器的构造方法里面写到: private List<ListBean> listI ...

  3. .NET下对Web.config与App.Config的增删改操作的代码

    把代码过程常用的内容做个收藏,下边代码段是关于 .NET下对Web.config与App.Config的增删改操作的代码. <?xml version="1.0" encod ...

  4. 微信小程序(六) 文章详情静态页面detail

    文章详情静态页面detail:

  5. join的简单总结

    BAT面试题:现在有T1.T2.T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉.这个多 ...

  6. <jsp:useBean>、<jsp:setProperty>与<jsp:getProperty>

    <jsp:useBean>标签 会调用java对象的无参构造方法,来创建实例. <jsp:useBean>标签是用来搭配JavaBean元件的标准标签,这里指的JavaBean ...

  7. JMeter接口测试 (二) ~ 参数化

    对应qq群号:616961231 上篇内容介绍了jmeter的基本使用, 略微提了如何做参数化,  本篇对参数化做进一步深入讲解, 参数化可以将一个变量使用不同数据, 比如有多个用户下单购买商品,调用 ...

  8. Linux 中磁盘阵列RAID10配置

    首先,了解一下RAID是什么?(百度所得) 独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地 ...

  9. iOS 常用三方(持续更新)

    iOS 常用三方 1.ZWMSegmentController 分页控制器 https://github.com/weiming4219/ZWMSegmentController

  10. java实现简单的solr查询

    SolrQuery类是实现solr查询的类. @Test public void testSelect() { String url = "http://localhost:8081/sol ...