字符串处理

  • 功能描述:从键盘输入一个文本行后,为用户提供菜单选择,实现字符串一些操作——显示文本行、查找并替换指定子串、删除指定子串、统计指定子串数目
  • 实现代码:
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #pragma warning(disable:4996)
  5.  
  6. #define NUM 256
  7.  
  8. void displayMenu();
  9. int choiceItem();
  10. void searchReplace(char *buf, char *s, char *t);
  11. void deleteString(char *buf, char *s);
  12. int totle(char *buf, char *s);
  13.  
  14. main()
  15. {
  16. char buf[NUM];
  17. char s[], t[];
  18. int choice;
  19.  
  20. system("cls");
  21. printf("Enter a text line : "); /*输入待操作文本行*/
  22. gets(buf);
  23. do{
  24. choice = choiceItem(); /*选择菜单项*/
  25. switch (choice){
  26. case :
  27. printf("Search:");
  28. gets(s);
  29. printf("\nReplace:");
  30. gets(t);
  31. searchReplace(buf, s, t);
  32. printf("\nThe result is %s\n", buf);
  33. break;
  34. case :
  35. printf("\nDelete:");
  36. gets(s);
  37. deleteString(buf, s);
  38. printf("\nThe result is %s\n", buf);
  39. break;
  40. case :
  41. printf("\nSearch:");
  42. gets(s);
  43. printf("\nThe counts of %s is %d\n", s, totle(buf, s));
  44. break;
  45. case :
  46. printf("\nThe string is %s\n", buf);
  47. break;
  48. }
  49. } while (choice != );
  50. printf("\n\nBey!");
  51. }
  52.  
  53. void displayMenu() /*显示菜单*/
  54. {
  55. printf("\n==========MENU===========\n");
  56. printf("1............Search/Replace");
  57. printf("\n2............Delete");
  58. printf("\n3............Totle");
  59. printf("\n4............Display");
  60. printf("\n0............Exit\n");
  61. printf("\nChoice:\n");
  62. }
  63.  
  64. int choiceItem() /*菜单选择*/
  65. {
  66. int choice;
  67. char line[];
  68.  
  69. do{
  70. displayMenu();
  71. gets(line);
  72. choice = atoi(line); /*将字符串转化为整型*/
  73. } while (choice< || choice>);
  74. return choice;
  75. }
  76.  
  77. void searchReplace(char *buf, char *s, char *t) /*查找替换子串*/
  78. {
  79. char m[]; /*内部缓冲区*/
  80. char *searchPtr = NULL;
  81. do{
  82. searchPtr = strstr(buf, s); /*查找子串*/
  83. if (searchPtr != NULL){
  84. strcpy(m, searchPtr + strlen(s)); /*将子串后面的字符串备份到m中*/
  85. strcpy(searchPtr, t);
  86. strcpy(searchPtr + strlen(t), m);
  87. }
  88. } while (searchPtr != NULL);
  89. }
  90.  
  91. void deleteString(char *buf, char *s) /*删除子串*/
  92. {
  93. char *searchPtr = NULL;
  94. do{
  95. searchPtr = strstr(buf, s); /*查找子串*/
  96. if (searchPtr != NULL){
  97. strcpy(searchPtr, searchPtr + strlen(s));
  98. }
  99. } while (searchPtr != NULL);
  100. }
  101.  
  102. int totle(char *buf, char *s) /*统计子串出现的次数*/
  103. {
  104. int n = ;
  105. char *searchPtr = NULL;
  106. do{
  107. searchPtr = strstr(buf, s); /*查找子串*/
  108. if (searchPtr != NULL){
  109. n++;
  110. buf = searchPtr + strlen(s); /*改变查找的初始位置*/
  111. }
  112. } while (searchPtr != NULL);
  113. return n;
  114. }

c语言程序设计案例教程(第2版)笔记(六)—字符串处理实例的更多相关文章

  1. c语言程序设计案例教程(第2版)笔记(四)—指针、分配存储空间、文件

    零散知识点: 指针类型:每个变量占用的首单元地址称为这个变量的存储地址. “&”为“取地址运算符”.格式:&  变量名.功能:返回指定变量的存储地址. “*”为“取内容运算”.格式:* ...

  2. c语言程序设计案例教程(第2版)笔记(二)—函数、递归

    零散知识点 模块化:将一个问题分解成若干个子问题的过程成为模块化. 模块化的优点:不但可以将一个复杂的问题分解成几个相对简单的问题:还可以提高程序代码的重用性. 函数:函数是构成C程序的基本单位.函数 ...

  3. c语言程序设计案例教程(第2版)笔记(五)-软件开发基础知识

    零散知识点: 软件的主要特征 软件是一种逻辑产品,而不是有型的物质: 软件需要设计.开发,但不是传统意义上的产品制造: 软件不会磨损,但软件需要维护,即:修改代码或增加模块: 虽然软件行业正在向基于组 ...

  4. c语言程序设计案例教程(第2版)笔记(三)—变量、结构体

    零散知识点: 变量        :C语言中,每个变量必须先定义后引用.所谓变量存在是指系统为这个变量分配一块存储空间,此时对变量的操作,就是对变量所对应的存储空间中存放的数据进行操作.人们将变量占据 ...

  5. c语言程序设计案例教程(第2版)笔记(一)—零散、输入输出、最小公倍数、选择排序、冒泡排序

    零散知识点: 非格式化输入输出:getchar().putchar() 格式化输入输出   :scanf().printf() 字符串输入输出   :gets() 或 scanf().puts() 或 ...

  6. 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词

    第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...

  7. C语言学习书籍推荐《C语言程序设计 现代方法(第2版)》下载

    下载地址:点我 C语言仍然是计算机领域的通用语言之一,但现在的C语言已经和当初的时候大不相同了.本书主要的一个目的就是通过一种“现代方法”来介绍C语言,书中强调标准C,强调软件工程,不再强调“手工优化 ...

  8. Python基础教程(第3版) 笔记(二)

    1.8模块Python提供了完成(某人的年 龄为32.9,并想将这个值向下圆整为32,因为他还没有满33岁)这种任务的函 数floor.导入模块,可以使用特殊命令import.函数floor包含在模块 ...

  9. js高级教程第3版笔记(我的理解)陆续更新中

    js基础语法'use strict'(严格模式)定义变量var object;只声明未赋值,默认值为undefined;var object1=值;声明并赋值;function fun(a){这样也叫 ...

随机推荐

  1. SpringData,JPA,MongoDB,Solr,Elasticsearch底层逻辑关系

    一: Spring-data底层的接口路基: spring-data : PagingAndSortingRepository-> CrudRepository-> Repository ...

  2. 转:TLV 格式及编解码示例

    TLV是一种可变格式,意思就是: Type类型, Lenght长度,Value值: Type和Length的长度固定,一般那是2.4个字节(这里统一采用4个字节): Value的长度有Length指定 ...

  3. Java时间戳转化为今天、昨天、明天(字符串格式)

    原文:http://www.open-open.com/code/view/1435301895825 时间戳,相信大家一定都不陌生,服务器经常会传回来时间戳,需要我们对时间戳进行处理.各种麻烦不断, ...

  4. 创立一个站点的前前后后(起因,域名,云平台,备案,CDN等等)(1)

    起因 写完<完美软件开发:方法与逻辑>这书后,原本想继续写书的,可出来參加了些社区活动后,我发现我写的书大家评价还行.但事实上不太理解.而接下来想写的书更加抽象点.准备叫<管理的解析 ...

  5. Hadoop-08-Hive本地独立式安装

    1.安装mysql sudo apt-get install mysql-server mysql-client 2.使用root账户登录mysql数据库,新建存放hive元数据的数据库.如果叫hiv ...

  6. antd 表单验证

    antd  form 自带方法 /** * 获取 form 自带方法 * getFieldDecorator * getFieldsError * getFieldError * isFieldTou ...

  7. rand和srand的用法(转载)

    首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数)表头文件: #include<stdlib.h> ...

  8. MySQL基础笔记(四) 索引

    一.什么是索引 索引(Index),可以看作一个指针,指向表里的数据.当数据库没有索引时,查找信息通常是全表扫描:使用了索引,它就会直接引导到数据在表里的准确物理位置. 优点:索引的主要目的是提高数据 ...

  9. Ios 项目从头开发 MVVM模式(三)

    1.话说,本来想做个聚合查询功能.可是我的重点想研究xmpp聊天功能.所以使用mvvm模式做了全然模式51job主界面的页面. 2.首先给大家看我执行起来的界面. 3.界面非常easy,做这个界面主要 ...

  10. HDU1540 Tunnel Warfare —— 线段树 区间合并

    题目链接:https://vjudge.net/problem/HDU-1540 uring the War of Resistance Against Japan, tunnel warfare w ...