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 ...
随机推荐
- android Java BASE64编码和解码一:基础
今天在做Android项目的时候遇到一个问题,需求是向服务器上传一张图片,要求把图片转化成图片流放在 json字符串里传输. 类似这样的: {"name":"jike&q ...
- 多种cell混合使用
有时候我们会碰到一个tableView上有多种cell,这个时候就需要定义多种cell,根据条件判断,当满足某个条件的时候选择某个cell 先看plist文件: Person.h #import &l ...
- JAVA基础学习day17--集合工具类-Collections
一.Collection简述 1.1.Collection与Collections的区别 Collections是集合的静态工具类 Collection:是集合的顶级接口 二.Sort 2.1.sor ...
- LINQ SQL分组取最近一条记录
最近项目有一个需求,从订单表查询出每个客户最近一条订单记录.数据库表结构如下图 SELECT * FROM ( select ROW_NUMBER()over(partition by [custid ...
- WPF-拖动面板移动窗口&设置窗口状态
在需要去掉窗口边框的情景下往往需要有拖动面板直接移动窗口和自定义按钮改变窗口状态和关闭的功能 拖动面板移动窗口 为面板控件添加MouseMove事件, 面板控件指的是用来当面板的控件,可以是grid. ...
- sql server 导出的datetime结果 CAST(0x00009E0E0095524F AS DateTime) 如何向mysql,oracle等数据库进行转换
1. 处理 sql server 导出的 datetime 类型的字段 在进行sql server向mysql等其他数据进行迁移数据时,会发现使用sql server导出的datetime类型的结果是 ...
- FAQ-Ubuntu12.04 15.04禁止移动介质自动播放
网上有有很多关于Ubuntu10.04关闭移动介质自动播放的方法,包括在文件管理器里面设置或者使用gconf-editor,但是从12.04开始这两种方法都不再好用了,关于移动介质的处理方法被移到了S ...
- PHPDBG
一.简介 PHPDBG的是一个轻量级.强大.易用的PHP调试平台.可以在PHP5.4和之上版本中使用.在php5.6和之上版本将内部集成. 二.安装 PHP源码下载 http://php.net/gi ...
- FQ 也要使用 Telegram
不知怎么回事,一款优秀的开源,跨平台,安全的即时通讯工具 Telegram 就被 GG 了. 但是我们还得继续使用--那就 FQ 吧.用 ShadowSocks FQ 还不错. 安装 ShadowSo ...
- git一些常用设置
用法:git config [选项] 配置文件位置 --global 使用全局配置文件 --system 使用系统级配置文件 -- ...