免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1957 | 回复: 10
打印 上一主题 下一主题

C字符串处理问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-09 10:16 |只看该作者 |倒序浏览
假如给定这样的一个字符串
AAAABAAXAAACBDAEAAAA
想把它转换程这样
BAXACBDAE
即把开头和结尾的A都删掉,中间重复的A只保留一个
想写个C程序,到现在还没头绪呢
哪位高人给指点一下吧
谢谢了~~~~

论坛徽章:
0
2 [报告]
发表于 2006-06-09 10:53 |只看该作者

回复 1楼 huasd1109 的帖子


  1. void f(char *str)
  2. {
  3.         char *p = str;
  4.         int i = 0;
  5.         while (*p == 'A') p++;
  6.         while (str[i] = *p) {
  7.                 if (*p == 'A')
  8.                         while (*p == 'A') p++;
  9.                 else
  10.                         p++;
  11.                 i++;
  12.         }
  13.         if ((i != 0) && (str[i - 1] == 'A')) {
  14.                 str[i - 1] = '\0';
  15.         }
  16. }
复制代码

[ 本帖最后由 xiaonanln 于 2006-6-9 10:54 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-06-09 11:05 |只看该作者
原帖由 xiaonanln 于 2006-6-9 10:53 发表
[code]
void f(char *str)
{
        char *p = str;
        int i = 0;
        while (*p == 'A') p++;
        while (str = *p) {
                if (*p == 'A')
                        while (*p == 'A') p++;
                else
                        p++;
                i++;
        }
        if ((i != 0) ...

多谢了!

如果给的字符串格式跟这个相同,不给定具体的字符串,让写个通用的处理函数,
该怎样改阿?

论坛徽章:
0
4 [报告]
发表于 2006-06-09 11:06 |只看该作者
楼主要自己多想想,这样才能有属于自己的收获。

论坛徽章:
0
5 [报告]
发表于 2006-06-09 13:16 |只看该作者
刚开始接触C
想了好长时间了,没头绪
向各位高人求助了

论坛徽章:
0
6 [报告]
发表于 2006-06-09 13:37 |只看该作者
原帖由 huasd1109 于 2006-6-9 13:16 发表
刚开始接触C
想了好长时间了,没头绪
向各位高人求助了



把你想处理的那个字符(你说的 ‘A’) 当作函数的一个参数不就可以了吗

论坛徽章:
0
7 [报告]
发表于 2006-06-09 13:50 |只看该作者

回复 3楼 huasd1109 的帖子

可以改成

  1. void f(char *str, int (*special)(int))
  2. {
  3.         char *p = str;
  4.         int i = 0;
  5.         while (special(*p)) p++;
  6.         while (str[i] = *p) {
  7.                 if (special(*p))
  8.                         while (special(*p)) p++;
  9.                 else
  10.                         p++;
  11.                 i++;
  12.         }
  13.         if ((i != 0) && (special(str[i - 1]))) {
  14.                 str[i - 1] = '\0';
  15.         }
  16. }
复制代码

special函数对于要删除的字符返回1,其他返回0
楼主大概可能要处理的是去除空格吧,这样可以 f(str, isspace)

论坛徽章:
0
8 [报告]
发表于 2006-06-09 14:08 |只看该作者
原帖由 xiaonanln 于 2006-6-9 13:50 发表
可以改成
[code]
void f(char *str, int (*special)(int))
{
        char *p = str;
        int i = 0;
        while (special(*p)) p++;
        while (str = *p) {
                if (special(*p))
                        while (special(*p)) p++;
                else ...


不是空格,是一个字符串里的重复字符,而这个字符是变化的

论坛徽章:
0
9 [报告]
发表于 2006-06-09 14:12 |只看该作者
需要先判断一下字符串里的重复字符

论坛徽章:
0
10 [报告]
发表于 2006-06-09 14:14 |只看该作者
什么叫变化的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP