1. /*
  2. 题目55: 有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";),要求写一个函数(接口),输出以下结果
  3. 1) 以逗号分割字符串,形成二维数组,并把结果传出;
  4. 2) 把二维数组行数运算结果也传出。
  5. strchr(“aa,aa”,’,’ );
  6. 请自己定义一个接口(函数)。
  7. 要求1:能正确表达功能的要求,定义出接口(函数)(30分);
  8. 要求2:正确实现接口(函数),并实现功能(40分);
  9. 要求3:编写正确的测试用例。(30分)。
  10. */
  11. //解析字符串
  12. #define _CRT_SECURE_NO_WARNINGS
  13. #include<stdio.h>
  14. #include<stdlib.h>
  15. #include<string.h>
  16.  
  17. //删除空格
  18. int removespace(const char *pin, char *pout);
  19.  
  20. //解析字符串
  21. int analysistr(const char *pin, char bufstr[][], char *requirc);
  22.  
  23. //打印字符数组
  24. int printfarr09(char parr[][]);
  25.  
  26. void main(){
  27. //原始字符串(非','结尾)
  28. const char *p = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,werertw";
  29. //原始字符串(','结尾)
  30. const char *p2 = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,";
  31. //新字符串数组
  32. char bufstr[][] = {};
  33. //新字符串数组
  34. char bufstr2[][] = { };
  35. //定义以何种字符作为截取字符
  36. char ch = ',';
  37. analysistr(p, bufstr, &ch);
  38. analysistr(p2, bufstr2, &ch);
  39. //打印新字符数组
  40. printfarr09(bufstr);
  41. system("pause");
  42. }
  43.  
  44. //打印二维数组
  45. int printfarr09(char parr[][]){
  46. int ERRO_MSG = ;
  47. if (parr == NULL)
  48. {
  49. ERRO_MSG = ;
  50. printf("parr==NULL erro msg:%d", ERRO_MSG);
  51. return ERRO_MSG;
  52. }
  53. //打印二维数组
  54. for (int i = ; i < ; i++)
  55. {
  56. printf("%s\n", parr[i]);
  57. }
  58. return ERRO_MSG;
  59. }
  60.  
  61. //删除空格
  62. int removespace(const char *pin, char *pout){
  63. int ERRO_MSG = ;
  64. if (pin == NULL)
  65. {
  66. ERRO_MSG = ;
  67. printf("pin==NULL erro msg:%d\n", ERRO_MSG);
  68. return ERRO_MSG;
  69. }
  70. if (pout == NULL)
  71. {
  72. ERRO_MSG = ;
  73. printf("pout==NULL erro msg:%d\n", ERRO_MSG);
  74. return ERRO_MSG;
  75. }
  76. while (*pin != '\0'){
  77. if (*pin != ' ')
  78. {
  79. *pout++ = *pin;
  80. }
  81. pin++;
  82. }
  83. return ERRO_MSG;
  84. }
  85.  
  86. //解析字符串
  87. int analysistr(const char *pin, char bufstr[][], char *requirc){
  88. int ERRO_MSG = ;
  89. if (pin == NULL)
  90. {
  91. ERRO_MSG = ;
  92. printf("pin==NULL erro msg:%d\n", ERRO_MSG);
  93. return ERRO_MSG;
  94. }
  95. if (bufstr == NULL)
  96. {
  97. ERRO_MSG = ;
  98. printf("bufstr==NULL erro msg:%d\n", ERRO_MSG);
  99. return ERRO_MSG;
  100. }
  101. if (requirc == NULL)
  102. {
  103. ERRO_MSG = ;
  104. printf("requirc==NULL erro msg:%d\n", ERRO_MSG);
  105. return ERRO_MSG;
  106. }
  107. //分解字符串
  108. //strchr函数原型:extern char *strchr(const char *s,char c);查找字符串s中首次出现字符c的位置。
  109. const char *p = pin;
  110. const char *ptmp = pin;
  111. //新字符串个数计数
  112. int ncount = ;
  113. int res = ;
  114. //临时存储一段字符串
  115. char strt[] = { };
  116. //用来删除strt中的空格
  117. char strt2[] = { };
  118. while (p != '\0'){
  119. /*memset是计算机中C / C++语言函数。
  120. 将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,
  121. 第一个值为指定的内存地址,块的大小由第三个参数指定,
  122. 这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。*/
  123. //清除字符串缓存,每次循环都会产生字符串缓存
  124. memset(strt, , sizeof(strt));
  125. memset(strt2, , sizeof(strt2));
  126. p = strchr(p, *requirc);
  127. if (p == NULL)
  128. {
  129. //处理','不作为最后一个符的情况
  130. //没有找到字符,那么将剩下的所有字符当作一个新字符串
  131. strcpy(strt, ptmp);
  132. //删除字符串中的空格
  133. res = removespace(strt, strt2);
  134. if (res)
  135. {
  136. ERRO_MSG = ;
  137. printf("删除空格fuc报错 erro msg:%d", ERRO_MSG);
  138. return ERRO_MSG;
  139. }
  140. //处理','作为最后一个符的情况
  141. if (strlen(strt2)>)
  142. {
  143. //将新字符串拷贝到数组里
  144. strcpy(bufstr[ncount], strt2);
  145. }
  146. break;
  147. }
  148. else{
  149. //此时ptmp在开头,p指针在字符','第一次出现的地方
  150. strncpy(strt, ptmp, p - ptmp);
  151. //删除字符串中的空格
  152. res = removespace(strt, strt2);
  153. if (res)
  154. {
  155. ERRO_MSG = ;
  156. printf("删除空格fuc报错 erro msg:%d", ERRO_MSG);
  157. return ERRO_MSG;
  158. }
  159. if (strlen(strt2)>)
  160. {
  161. //将新字符串拷贝到数组里
  162. strcpy(bufstr[ncount], strt2);
  163. ncount++;
  164. }
  165. //重新初始化指针
  166. ptmp = p = p + ;
  167. }
  168. }
  169. return ERRO_MSG;
  170. }

C语言 百炼成钢19的更多相关文章

  1. C语言 百炼成钢7

    //题目19:一个数如果恰好等于它的因子之和,这个数就称为“完数”.例如6=1+2+3.编程找出1000以内的所有完数. #define _CRT_SECURE_NO_WARNINGS #includ ...

  2. C程序设计语言练习题1-9

    练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() // ...

  3. C语言 百炼成钢23

    /* 题目59:链表如下 typedef struct _LinkList { int data; struct _LinkList*next; } LinkList; 有如下结点数据域 1 2 3 ...

  4. C 语言 习题 1-9

    练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替. #include <stdio.h> int main(int argc, char const *ar ...

  5. Java入门 - 语言基础 - 19.方法

    原文地址:http://www.work100.net/training/java-method.html 更多教程:光束云 - 免费课程 方法 序号 文内章节 视频 1 概述 2 方法的定义 3 方 ...

  6. C语言 百炼成钢3

    //题目7:用*号输出空心菱形图案 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...

  7. C语言 百炼成钢2

    //题目4:输入某年某月某日,判断这一天是这一年的第几天? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<st ...

  8. C语言 百炼成钢1

    //题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> ...

  9. C语言 百炼成钢18

    //题目52:用递归打印以下图形 //* //*.*. //*..*..*.. //*...*...*...*... //*....*....*....*....*.... #include<s ...

随机推荐

  1. 分形几何算法和实现(C语言)

    初识分形 1.分形的含义: 英文单词Fractal,它是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的.其含义是不规则的.破碎的.分数的.曼德勃罗是想用此词来描述自然界中传统 ...

  2. C编程常见问题总结

    本文是C编程中一些常见错误的总结,有些是显而易见的,有些则是不容易发现 本文地址:http://www.cnblogs.com/archimedes/p/get-screwed-c.html,转载请注 ...

  3. PL/SQL基础1(笔记)

    --基本结构DECLARE--变量声明部分:在此声明PL/SQL用到的变量,类型,游标,以及局部的存储过程和函数BEGIN --执行部分:过程及SQL语句,即程序的主要部分 EXCEPTION --执 ...

  4. ubuntu15.10 给解压版的eclipse安装桌面快捷方式

    在桌面用vi 建立eclipse.desktop文件,并赋予权限 sudo chmod  u+x  /home/liujl/Desktop/eclipse.desktop [Desktop Entry ...

  5. ajaxFileUpload文件上传

    一.简介 ajaxFileUpload是一种异步的文件上传控件,通过ajax进行文件上传,并获取上传处理结果.在很多时候我们需要使用到文件上传的功能,但是不需要使用那些强大的上传插件.此时就可以使用a ...

  6. iBus

    0.闲言 闲来无事,重新玩玩Ubuntu,于是先把Ubuntu13.04删了(为什么是13.04?我也不知道)翻出14.04U盘安装,还算顺利,就是不知道为什么DiskGenius为什么一直提示分区表 ...

  7. C语言变参问题

    C++中有函数重载这种方法,以供我们调用时要可以不确定实参的个数,其实 C 语言也可以,而且更高明! 我们在stdio.h 中可以看到 printf() 函数的原型: int printf(char ...

  8. django中的站点管理

    所谓网页开发是有趣的,管理界面是千篇一律的.所以就有了django自动管理界面来减少重复劳动. 一.激活管理界面 1.django.contrib包 django自带了很多优秀的附加组件,它们都存在于 ...

  9. openstack排错

    一.排错方法: 1.查看日志路径为/var/log,具体哪个组件出了问题进入其目录查看. 2.debug root@sc-ctrl01:~# keystone --debug user-list ro ...

  10. 漫谈计算摄像学 (一):直观理解光场(Light Field)

    什么是计算摄像学 计算摄像学(Computational Photography)是近年来越来越受到注意的一个新的领域,在学术界早已火热.本来计算摄像学的业界应用在群众中一直没什么知名度,直到Lytr ...