c语言程序设计案例教程(第2版)笔记(六)—字符串处理实例

字符串处理

  • 功能描述:从键盘输入一个文本行后,为用户提供菜单选择,实现字符串一些操作——显示文本行、查找并替换指定子串、删除指定子串、统计指定子串数目
  • 实现代码:
  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[80], t[80];
 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 1:
 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 2:
 35             printf("\nDelete:");
 36             gets(s);
 37             deleteString(buf, s);
 38             printf("\nThe result is %s\n", buf);
 39             break;
 40         case 3:
 41             printf("\nSearch:");
 42             gets(s);
 43             printf("\nThe counts of %s is %d\n", s, totle(buf, s));
 44             break;
 45         case 4:
 46             printf("\nThe string is %s\n", buf);
 47             break;
 48         }
 49     } while (choice != 0);
 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[80];
 68 
 69     do{
 70         displayMenu();
 71         gets(line);
 72         choice = atoi(line);   /*将字符串转化为整型*/
 73     } while (choice<0 || choice>4);
 74     return choice;
 75 }
 76 
 77 void searchReplace(char *buf, char *s, char *t)   /*查找替换子串*/
 78 {
 79     char m[256];   /*内部缓冲区*/
 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 = 0;
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 }

 

posted @ 2018-01-29 17:08  小嘉欣  阅读(484)  评论(0编辑  收藏  举报