C语言 百炼成钢19
- /*
- 题目55: 有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";),要求写一个函数(接口),输出以下结果
- 1) 以逗号分割字符串,形成二维数组,并把结果传出;
- 2) 把二维数组行数运算结果也传出。
- strchr(“aa,aa”,’,’ );
- 请自己定义一个接口(函数)。
- 要求1:能正确表达功能的要求,定义出接口(函数)(30分);
- 要求2:正确实现接口(函数),并实现功能(40分);
- 要求3:编写正确的测试用例。(30分)。
- */
- //解析字符串
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- //删除空格
- int removespace(const char *pin, char *pout);
- //解析字符串
- int analysistr(const char *pin, char bufstr[][], char *requirc);
- //打印字符数组
- int printfarr09(char parr[][]);
- void main(){
- //原始字符串(非','结尾)
- const char *p = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,werertw";
- //原始字符串(','结尾)
- const char *p2 = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,";
- //新字符串数组
- char bufstr[][] = {};
- //新字符串数组
- char bufstr2[][] = { };
- //定义以何种字符作为截取字符
- char ch = ',';
- analysistr(p, bufstr, &ch);
- analysistr(p2, bufstr2, &ch);
- //打印新字符数组
- printfarr09(bufstr);
- system("pause");
- }
- //打印二维数组
- int printfarr09(char parr[][]){
- int ERRO_MSG = ;
- if (parr == NULL)
- {
- ERRO_MSG = ;
- printf("parr==NULL erro msg:%d", ERRO_MSG);
- return ERRO_MSG;
- }
- //打印二维数组
- for (int i = ; i < ; i++)
- {
- printf("%s\n", parr[i]);
- }
- return ERRO_MSG;
- }
- //删除空格
- int removespace(const char *pin, char *pout){
- int ERRO_MSG = ;
- if (pin == NULL)
- {
- ERRO_MSG = ;
- printf("pin==NULL erro msg:%d\n", ERRO_MSG);
- return ERRO_MSG;
- }
- if (pout == NULL)
- {
- ERRO_MSG = ;
- printf("pout==NULL erro msg:%d\n", ERRO_MSG);
- return ERRO_MSG;
- }
- while (*pin != '\0'){
- if (*pin != ' ')
- {
- *pout++ = *pin;
- }
- pin++;
- }
- return ERRO_MSG;
- }
- //解析字符串
- int analysistr(const char *pin, char bufstr[][], char *requirc){
- int ERRO_MSG = ;
- if (pin == NULL)
- {
- ERRO_MSG = ;
- printf("pin==NULL erro msg:%d\n", ERRO_MSG);
- return ERRO_MSG;
- }
- if (bufstr == NULL)
- {
- ERRO_MSG = ;
- printf("bufstr==NULL erro msg:%d\n", ERRO_MSG);
- return ERRO_MSG;
- }
- if (requirc == NULL)
- {
- ERRO_MSG = ;
- printf("requirc==NULL erro msg:%d\n", ERRO_MSG);
- return ERRO_MSG;
- }
- //分解字符串
- //strchr函数原型:extern char *strchr(const char *s,char c);查找字符串s中首次出现字符c的位置。
- const char *p = pin;
- const char *ptmp = pin;
- //新字符串个数计数
- int ncount = ;
- int res = ;
- //临时存储一段字符串
- char strt[] = { };
- //用来删除strt中的空格
- char strt2[] = { };
- while (p != '\0'){
- /*memset是计算机中C / C++语言函数。
- 将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,
- 第一个值为指定的内存地址,块的大小由第三个参数指定,
- 这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。*/
- //清除字符串缓存,每次循环都会产生字符串缓存
- memset(strt, , sizeof(strt));
- memset(strt2, , sizeof(strt2));
- p = strchr(p, *requirc);
- if (p == NULL)
- {
- //处理','不作为最后一个符的情况
- //没有找到字符,那么将剩下的所有字符当作一个新字符串
- strcpy(strt, ptmp);
- //删除字符串中的空格
- res = removespace(strt, strt2);
- if (res)
- {
- ERRO_MSG = ;
- printf("删除空格fuc报错 erro msg:%d", ERRO_MSG);
- return ERRO_MSG;
- }
- //处理','作为最后一个符的情况
- if (strlen(strt2)>)
- {
- //将新字符串拷贝到数组里
- strcpy(bufstr[ncount], strt2);
- }
- break;
- }
- else{
- //此时ptmp在开头,p指针在字符','第一次出现的地方
- strncpy(strt, ptmp, p - ptmp);
- //删除字符串中的空格
- res = removespace(strt, strt2);
- if (res)
- {
- ERRO_MSG = ;
- printf("删除空格fuc报错 erro msg:%d", ERRO_MSG);
- return ERRO_MSG;
- }
- if (strlen(strt2)>)
- {
- //将新字符串拷贝到数组里
- strcpy(bufstr[ncount], strt2);
- ncount++;
- }
- //重新初始化指针
- ptmp = p = p + ;
- }
- }
- return ERRO_MSG;
- }
C语言 百炼成钢19的更多相关文章
- C语言 百炼成钢7
//题目19:一个数如果恰好等于它的因子之和,这个数就称为“完数”.例如6=1+2+3.编程找出1000以内的所有完数. #define _CRT_SECURE_NO_WARNINGS #includ ...
- C程序设计语言练习题1-9
练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() // ...
- C语言 百炼成钢23
/* 题目59:链表如下 typedef struct _LinkList { int data; struct _LinkList*next; } LinkList; 有如下结点数据域 1 2 3 ...
- C 语言 习题 1-9
练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替. #include <stdio.h> int main(int argc, char const *ar ...
- Java入门 - 语言基础 - 19.方法
原文地址:http://www.work100.net/training/java-method.html 更多教程:光束云 - 免费课程 方法 序号 文内章节 视频 1 概述 2 方法的定义 3 方 ...
- C语言 百炼成钢3
//题目7:用*号输出空心菱形图案 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...
- C语言 百炼成钢2
//题目4:输入某年某月某日,判断这一天是这一年的第几天? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<st ...
- C语言 百炼成钢1
//题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> ...
- C语言 百炼成钢18
//题目52:用递归打印以下图形 //* //*.*. //*..*..*.. //*...*...*...*... //*....*....*....*....*.... #include<s ...
随机推荐
- 分形几何算法和实现(C语言)
初识分形 1.分形的含义: 英文单词Fractal,它是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的.其含义是不规则的.破碎的.分数的.曼德勃罗是想用此词来描述自然界中传统 ...
- C编程常见问题总结
本文是C编程中一些常见错误的总结,有些是显而易见的,有些则是不容易发现 本文地址:http://www.cnblogs.com/archimedes/p/get-screwed-c.html,转载请注 ...
- PL/SQL基础1(笔记)
--基本结构DECLARE--变量声明部分:在此声明PL/SQL用到的变量,类型,游标,以及局部的存储过程和函数BEGIN --执行部分:过程及SQL语句,即程序的主要部分 EXCEPTION --执 ...
- ubuntu15.10 给解压版的eclipse安装桌面快捷方式
在桌面用vi 建立eclipse.desktop文件,并赋予权限 sudo chmod u+x /home/liujl/Desktop/eclipse.desktop [Desktop Entry ...
- ajaxFileUpload文件上传
一.简介 ajaxFileUpload是一种异步的文件上传控件,通过ajax进行文件上传,并获取上传处理结果.在很多时候我们需要使用到文件上传的功能,但是不需要使用那些强大的上传插件.此时就可以使用a ...
- iBus
0.闲言 闲来无事,重新玩玩Ubuntu,于是先把Ubuntu13.04删了(为什么是13.04?我也不知道)翻出14.04U盘安装,还算顺利,就是不知道为什么DiskGenius为什么一直提示分区表 ...
- C语言变参问题
C++中有函数重载这种方法,以供我们调用时要可以不确定实参的个数,其实 C 语言也可以,而且更高明! 我们在stdio.h 中可以看到 printf() 函数的原型: int printf(char ...
- django中的站点管理
所谓网页开发是有趣的,管理界面是千篇一律的.所以就有了django自动管理界面来减少重复劳动. 一.激活管理界面 1.django.contrib包 django自带了很多优秀的附加组件,它们都存在于 ...
- openstack排错
一.排错方法: 1.查看日志路径为/var/log,具体哪个组件出了问题进入其目录查看. 2.debug root@sc-ctrl01:~# keystone --debug user-list ro ...
- 漫谈计算摄像学 (一):直观理解光场(Light Field)
什么是计算摄像学 计算摄像学(Computational Photography)是近年来越来越受到注意的一个新的领域,在学术界早已火热.本来计算摄像学的业界应用在群众中一直没什么知名度,直到Lytr ...