看流星社区

 找回密码
 注册账号
查看: 1724|回复: 0

[算法练习]将字符串中*提前&&删除指定字符

[复制链接]

该用户从未签到

发表于 2017-6-1 13:33:07 | 显示全部楼层 |阅读模式
//思路:只要不是星号的都交给写指针写入,忽略*
//问题可以转换为:删除字符串中的特定字符 只不过这个是从尾巴开始
  1. #include <stdio.h>
  2. size_t _strlen(char *str)
  3. {
  4.         return (NULL == str || *str =='\0') ? 0 : _strlen(str+1) + 1;
  5. }
  6. //思路:只要不是星号的都交给写指针写入,忽略*
  7. //问题可以转换为:删除字符串中的特定字符 只不过这个是从尾巴开始
  8. char* str_TiQian(char *str)
  9. {
  10.         if(NULL == str || *str == '\0')
  11.                 return NULL;
  12.         int len = 0;
  13.         int Dst = 0;
  14.         int count = 0;
  15.         len = Dst = _strlen(str) - 1;
  16.         do
  17.         {
  18.                 if(str[len] != '*')
  19.                         str[Dst--] = str[len];//这里是先执行str[dst] = str[len] 然后才dst-1;
  20.                 else
  21.                         count ++;
  22.         } while (len--);
  23.         for (int i = 0; i < count; i++)
  24.         {
  25.                 str[i] = '*';
  26.         }
  27.         printf("%s\n",str);
  28.         return str;
  29. }
  30. //思路同上
  31. char* str_TiQian_Ex(char* str)
  32. {
  33.         if(NULL == str || '\0' == *str)
  34.                 return NULL;
  35.         char *pRead = 0;
  36.         char *pWrite = 0;
  37.         pRead = pWrite = str + _strlen(str) - 1;
  38.         do
  39.         {
  40.                 if(*pRead != '*')
  41.                         *pWrite-- = *pRead;
  42.         } while (pRead-- != str);//先比较再赋值
  43.         while (pRead <= pWrite)
  44.         {
  45.                 *pRead++ = '*';//先执行后面的在执行加操作
  46.                 //相当于
  47.                 //*pRead = '0';
  48.                 //pRead ++;
  49.         }
  50.         printf("%s\n",str);
  51.         return str;
  52. }
  53. char* Del_speciol_ch(char *str, char ch)
  54. {
  55.         if(NULL == str || *str == '\0')
  56.                 return NULL;
  57.         char *pRead = 0;
  58.         char *pWrite = 0;
  59.         pRead = pWrite = str;
  60.         do
  61.         {
  62.                 if(*pRead != ch)
  63.                         *pWrite++ = *pRead;
  64.         } while (*pRead++ != '\0');
  65.         printf("%s\n",str);
  66.        
  67.         return str;
  68. }
  69. char* Del_speciol_ch_Ex(char *str, char ch)
  70. {
  71.         if(NULL == str || *str == '\0')
  72.                 return NULL;
  73.         int sour = 0;
  74.         int dst = 0;
  75.         do
  76.         {
  77.                 if(str[sour] != ch)
  78.                         str[dst++] = str[sour];
  79.         } while (str[sour++] != '\0');
  80.         printf("%s\n",str);
  81.         return str;
  82. }
  83. void main()
  84. {
  85.        
  86.         char str0[260] = "hel*lo w*or*ld";
  87.         printf("%s\n",str0);
  88.         str_TiQian(str0);
  89.         char str1[260] = "***hel*l**o w*o**r*ld**";
  90.         printf("\n%s\n",str1);
  91.         str_TiQian(str1);
  92.         char str3[260] = "***hel*l**o w*o**r*ld**";
  93.         printf("\n%s\n",str3);
  94.         str_TiQian_Ex(str3);
  95.         char str4[260] = "hel***lo w*or*ld";
  96.         printf("\n%s\n",str4);
  97.         str_TiQian_Ex(str4);
  98.         printf("\n----------\nDel * \n");
  99.         char str5[260] = "hel***lo w*or*ld";
  100.         printf("\n%s\n",str5);
  101.         Del_speciol_ch(str5,'*');
  102.         Del_speciol_ch(str3,'*');
  103.         char str6[260] = "hel***lo w*or*ld";
  104.         char str7[260] = "***hel*l**o w*o**r*ld**";
  105.         printf("\n%s\n",str6);
  106.         Del_speciol_ch_Ex(str6,'*');
  107.         printf("\n%s\n",str7);
  108.         Del_speciol_ch_Ex(str7,'*');
  109.         getchar();
  110. }
复制代码
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 12:20

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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