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 XMl 解析神奇xstream 三: 把复杂对象转换成 xml
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- 安卓开发_浅谈ContextMenu(上下文菜单)
长下文菜单,即长按view显示一个菜单栏 与OptionMenu的区别OptionMenu对应的是activity,一个activity只能拥有一个选项菜单ContextMenu对应的是View,每个 ...
- Android-ListView类
ListView组件在应用程序中可以说是不可或缺的一部分,ListView主要是显示列表数据,同时可以滚动查看,这篇博客主要是对ListView的基本用法进行说明,后面会依次对ListView点击动态 ...
- 【读书笔记】iOS-本地文件和数据安全注意事项
一,程序文件的安全. 可通过将JavaScript源码时行混淆和加密,防止黑客轻易地阅读和篡改相关的逻辑,也可以防止自己的Web端与Native端的通讯协议泄露. 二,本地数据安全. 对于本地的重要数 ...
- 在iOS 8中使用UIAlertController
iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸 ...
- 可折叠的ToolBar+抽屉菜单NavigationView+浮动按钮FloatButton
使用Material Design风格的ToolBar和抽屉导航 先看个简单的运行效果 主要记录下布局的写法 1 用到的Google Design依赖和V7包依赖 compile 'com.andro ...
- diff, cmp, patch
diff 以行为单位比较两个文件之间的差异,经常用来查看同一个文件的新旧版本的差异,通常用在文本文件的比较,可以使用重定向'>'制作补丁文档,通常以.patch结尾 \(diff [-bBi] ...
- Android分步注册,Activity由B返回A修改再前往B,B中已填项不变
某日突然想到标题问题,一般来说返回上一个Activity,当前Activity应该自动销毁.要想保留值,便想到用bundle传递的方式 最后功能是实现了,但感觉方法很笨. 主要代码如下: packag ...
- private成员变量真的私有吗?(用指针刨他祖坟)
今天写程序时突然想到的,为什么不用指针去获取类的成员变量呢.于是做了这个实验.首先定义了一个类: class Test { private: int i; char c; int* p; public ...
- 自定义input[type="radio"]的样式
对于表单,input[type="radio"] 的样式总是不那么友好,在不同的浏览器中表现不一. 为了最大程度的显示出它们的差别,并且为了好看,首先定义了一些样式: <fo ...