鱼C论坛

 找回密码
 立即注册
查看: 1714|回复: 0

[技术交流] 010-指针、字符串练习

[复制链接]
发表于 2018-8-15 12:47:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-8-16 08:47 编辑

1、练习一:两个辅助指针挖取字符串
        题目:有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";),要求写一个函数(接口),输出以下结果
                1)        以逗号分割字符串,形成二维数组,并把结果传出;
                2)        把二维数组行数运算结果也传出。
        请自己定义一个接口(函数)。
                要求1:能正确表达功能的要求,定义出接口(函数);
                要求2:正确实现接口(函数),并实现功能;
                要求3:编写正确的测试用例。
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "string.h"
  4. int spitString(const char *buf1, const char c, char buf[10][30], int *mycount)
  5. {
  6.         const char *p = NULL;     // const char *p 指向常量的指针,去接受const char*形参
  7.         const char *pTmp = NULL;
  8.         int count = 0;
  9.         int tmpcount = 0;         

  10.         pTmp = buf1;     
  11.         p = buf1;
  12.         do
  13.         {
  14.                 p = strchr(p, c);
  15.                 if (p!= NULL)      //如果找到
  16.                 {
  17.                         tmpcount = p - pTmp;   //得到挖到字符串的长度
  18.                         memcpy(buf[count], pTmp , tmpcount);
  19.                         buf[count][tmpcount] = '\0';  // C语言用带'\0'字符数组模拟字符串
  20.                         printf("%s \n", buf[count]);
  21.                         pTmp = p = p + 1;
  22.                         count ++;
  23.                 }
  24.                 else
  25.                 {
  26.                         break;
  27.                 }
  28.         } while (*p != '\0');
  29. }
  30. void main()
  31. {
  32.         char *p = "abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";
  33.         char c = ',';
  34.         char buf[10][30];
  35.         int ncount;
  36.         spitString(p, c, buf, &ncount);
  37.         system("pause");
  38. }
复制代码

2、练习二:查找子串出现次数并替换
        题目:有一个字符串符合以下特征(” "abcd11111abcd2222abcdqqqqq"”),要求写一个函数(接口),输出以下结果
                1)        求字符串字串(“abcd”)出现的次数,并把结果传出;
                2)        把字符串替换成(dcba11111dcba 2222dcbaqqqqq),并把结果传出。
        请自己定义一个接口(函数)。
                要求1:能正确表达接口(函数);
                要求2:正确实现接口(函数),并实现功能;
                要求3:编写正确的测试用例。
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "string.h"

  4. // 交换内存空间
  5. int  memchange(char *p1, char *p2)
  6. {
  7.         int rev = 0;
  8.         if (p1 == NULL || p2 == NULL)
  9.         {
  10.                 rev = -1;
  11.                 return rev;
  12.          }
  13.         char c;
  14.         while (p1 < p2)
  15.         {
  16.                 c = *p1;
  17.                 *p1 = *p2;
  18.                 *p2 = c;
  19.                 p1++;
  20.                 p2--;
  21.         }
  22.         return rev;       
  23. }

  24. // 查找子串出现的次数,并替换子串
  25. int getRestbuf(const char*inbuf1, const char *inbuf2, int *count, char *outbuf)
  26. {
  27.         int rev = 0;
  28.         if (inbuf1 == NULL || inbuf2 == NULL)
  29.         {
  30.                 rev = -1;
  31.                 return rev;
  32.         }

  33.         char c = inbuf2[0];  //要查找的字符串的首字符
  34.         char findstr[100];
  35.         int  len = strlen(inbuf2);
  36.         int outcount = 0 ;
  37.         strcpy(outbuf, inbuf1);
  38.         //printf("%s\n", outbuf);
  39.        
  40.         do
  41.         {
  42.                 outbuf = strchr(outbuf, c);
  43.                 if (outbuf != NULL)   // 如果找到
  44.                 {
  45.                         memcpy(findstr, outbuf, len);
  46.                         findstr[len] = '\0';
  47.                         if (strcmp(findstr, inbuf2) == 0)
  48.                         {
  49.                                 outcount++;
  50.                                 memchange(outbuf, outbuf+len-1);
  51.                         }
  52.                         outbuf++;
  53.                 }
  54.                 else
  55.                 {
  56.                         break;
  57.                  }        
  58.         }while (*outbuf != '\0');
  59.        
  60.         *count = outcount;       
  61.         return rev;
  62. }

  63. void main()
  64. {
  65.         int rev = 0;
  66.         char *strbuf1 = "abcd11111abcd2222abcdqqqqq";
  67.         char *strbuf2 = "abcd" ;
  68.         int str2Count = 0;
  69.         char strout[100];
  70.                
  71.         rev = getRestbuf(strbuf1, strbuf2, &str2Count, strout);
  72.         if (rev != 0)
  73.         {
  74.                 printf("fun error, code:%d", rev);
  75.         }
  76.         printf("outstr:%s\ncount:%d\n", strout, str2Count);
  77.         system("pause");
  78. }
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 20:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表