鱼C论坛

 找回密码
 立即注册
查看: 1855|回复: 1

字符串的展开

[复制链接]
发表于 2021-11-6 14:14:24 | 显示全部楼层 |阅读模式

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

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

x
如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简
写,输出时,用连续递增的字母或数字串替代其中的’-’.
即“d-h”输出为“defgh”
“4-8”输出为“45678"
现在编写一个函数并在主函数调用能够实现以下逻辑:
遇到以下情况需要做字符串的展开:
在输入的字符串中,出现了减号“-”,且减号两侧同为小写字母或同为数字。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-7 01:00:32 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-7 02:04 编辑

        这个代码太烧脑了!
  1. #include <stdio.h>

  2. bool alpha(char c)
  3. {
  4.         return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ;
  5. }

  6. bool upper(char c)
  7. {
  8.         return c >= 'A' && c <= 'Z'                             ;
  9. }

  10. bool lower(char c)
  11. {
  12.         return c >= 'a' && c <= 'z'                             ;
  13. }

  14. bool digit(char c)
  15. {
  16.         return c >= '0' && c <= '9'                             ;
  17. }

  18. bool check(char s[])
  19. {
  20.         int m                                                   ;
  21.         bool r = false                                          ;
  22.         for(m = 0 ; s[m] && m < 3 ; m ++)                       ;
  23.         if(m > 2 && s[1] == '-') {
  24.                 if((alpha(s[0]) && alpha(s[2])) || (digit(s[0]) && digit(s[2]))) {
  25.                         if((upper(s[0]) && upper(s[2])) || (lower(s[0]) && lower(s[2]))) {
  26.                                 r = true                        ;
  27.                         } else if(digit(s[0]) && digit(s[2])) {
  28.                                 r = true                        ;
  29.                         }
  30.                 }
  31.         }
  32.         return r                                                ;
  33. }

  34. char * expand(char s[])
  35. {
  36.         int c , d , e , i , k , m  , n                                                                ;
  37.         bool f                                                                                        ;
  38.         for(m = 0 ; s[m] ; m ++)                                                                      ;
  39.         for(n = m , f = false , i = 0 ; i < n - 2 ; i ++) {
  40.                 if(check(& s[i])) {
  41.                         e = (s[i + 2] > s[i]) ? s[i + 2] - s[i] + 1 : s[i] - s[i + 2] + 1             ;
  42.                         if(e > 3) {
  43.                                 for(k = 0 ; k < n - i - 1 ; k ++) s[n - 1 + e - 3 - k] = s[n - 1 - k] ;
  44.                                 n += e - 3                                                            ;
  45.                         } else if(e < 3) {
  46.                                 for(k = 0 ; k < n - i - 1 ; k ++) s[i + (e - 1) + k] = s[i + 2 + k]   ;
  47.                                 n -= 3 - e                                                            ;
  48.                         }
  49.                         if(e > 2) {
  50.                                 d = (s[i + 2] > s[i]) ? 1 : -1                                        ;
  51.                                 for(c = s[i] , k = 0 ; k < e ; c += d , k ++) s[i + k] = c            ;
  52.                         }
  53.                         i += e - 1                                                                    ;
  54.                 }
  55.         }
  56.         return s                                                                                      ;
  57. }

  58. int main(void)
  59. {
  60.         char s[256] = {0}           ;
  61.         gets(s)                     ;
  62.         printf("%s\n" , expand(s))  ;
  63. }
复制代码

        编译、运行实况:
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. 12345K-Abcdefg-x123-9abcdef9-1
  4. 12345KJIHGFEDCBAbcdefghijklmnopqrstuvwx123456789abcdef987654321

  5. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 21:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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