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
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语言提高(第二次作业)的更多相关文章
- C语言程序设计第二次作业--顺序结构
C语言程序设计第二次作业--顺序结构 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido ...
- C语言基础第二次作业
PTA第一次作业 题目7-1 统计学生成绩 1.实验代码 #include<stdio.h> int main(void){ ,B=,C=,D=,E=,f; scanf("%d ...
- c语言:第二次作业,循环结构
1.本章学习总结(2分) 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 循环相比分支和顺序结构难了许多,相对的来说我的c语言的基础比之前有提高,但是还是很多题想了很久也 ...
- C语言程序第二次作业
(一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...
- C 语言学习 第二次作业总结
本次作业内容,主要有以下几点: 新建 coding 帐号,且使用 coding 上传本次作业的代码 Printf及条件判断语句的使用 作业总结 作业总结: 同学们开始渐入佳境,能够较为流畅的写出合理的 ...
- C语言程序设计第二次作业
一.学习内容 掌握关系运算符.逻辑运算符.条件运算符 掌握常用数学函数的用法 if语句(单分支,双分支和多分支) 用switch语句实现多分支 理解多个if语句,if...else if... 和if ...
- C语言的第二次作业
一.PTA实验作业 题目1. 计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.本题代码 #include<stdio.h> #include<math.h> int ...
- C语言程序设计第二次作业——顺序结构
(一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. 错误信息1: 错误原因:i和d位置错误 改正方法:i和d位置互换 错误信息2: 错误原因:\n后缺了一个" 改正方法:\n后加一个 ...
- C语言程序设计第二次作业—————顺序结构改
1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido.h> int mian() { ...
- C语言程序设计第二次作业1
(一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...
随机推荐
- fork/join概述
Fork/Join是java 7 解决并发问题的解决方案. 是 java内部并行框架.核心思想分别为拆分任务和结果合并,在核心思想外,为了提高cpu多核的利用率,设计了工作窃取算法,并将工作队列设计为 ...
- 文件类型解析漏洞防御与攻击(PHP)
简介: 解析漏洞主要是一些特殊文件被iis.Apache.Nginx等服务在某种情况下解释成脚本文件格式并得以执行而产生的漏洞,一般的思路都是用图片木马来欺骗服务器,上传webshell,达到提权的目 ...
- 【Dojo 1.x】笔记5 使用本地引用
习惯用CDN引用的同学肯定会知道还有一种叫本地引用,这篇笔记测试本地引用. Dojo SDK下载地址:点我 下载中间的Release Package即可,如果希望下载完整包(Full Source), ...
- Android为TV端助力 进制互相转换
byte转换为16进制 public static String GetByte2Str(byte b) { byte[] buff = new byte[2]; buff[0] = mHex[(b ...
- centos服务器如何监控访问ip,并将非法ip通过防火墙禁用
centos服务器如何监控访问ip,并将非法ip通过防火墙禁用 上周给朋友帮忙,上架了一款小游戏(年年有鱼),项目刚一上线,就遇到了ddos攻击,阿里云连续给出了6次ddos预警提示,服务器一度处于黑 ...
- Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 解决办法
今天在Ubuntu16.04 上安装python包的时候,出现了这个坑爹的问题: 解决办法,内容总结如下 情况是这样,报错是因为没有把依赖包安装全,报错情况如下图: 解决办法,先安装一些必须的依赖: ...
- win快捷键
******************键盘快捷键大全****************** 一.常见用法: F1 显示当前程序或者windows的帮助内容. F2 当你选中一个文件的话,这意味着“重命名 ...
- 关于tomcat 配置时一闪而过的问题
TOMCAT JAVA_HOME or JRE_HOME environment variable is not defined correctly 按照教程已经安装了JDK并设置好了JAVA_HOM ...
- 安装Linux内核源代码
系统:Ubuntu 18 CPU架构:AMD64 1,在终端输入:sudo apt install linux-source 命令 2,进入/usr/src/linux-source-4.15.0目录 ...
- LeetCode算法题-Maximum Average Subarray I(Java实现)
这是悦乐书的第278次更新,第294篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第146题(顺位题号是643).给定由n个整数组成的数组,找到具有最大平均值的长度为k的 ...