| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:我不太会写C代码的字符串程序,各位不要吝啬你们的意见啊 40 分放出,欢迎 ...
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:40 回复次数:6 
我不太会写C代码的字符串程序,各位不要吝啬你们的意见啊 40 分放出,欢迎各位帮我测试 以及提出宝贵意见[测试源字符串,看看共出现多少个字符,每个字符出现的
#include<stdio.h>
#include<string.h>
//移动字符串,从destpos处至结尾的字串
//移动到benpos处
//返回字串 b
void movechr(char *b,int benpos,int destpos)  
{  
  int c1=0,i;
  char *c;
  c=b;
  c1=strlen(b)-destpos+1; //待移动的字符串长度
  b+=benpos-1;            //置源串与目标位置
  c+=destpos-1;           //置待移动串与目标位置
  for(i=0;i<c1;i++)
  {
      *b=*c;
      b++;
      c++;
  }
  *b='\0';                //修改源字串结束标志

}  

//删除字符串函数 返回字串 b
void delchr(char *b,int chrpos)
{
    movechr(b,chrpos,chrpos+1);  //移动一个长度,即代表删除
}

int main()
{
    int i,j,cout;
    int t[256];    //置放单个不重复的字符
    int cnum[256]; //置放对应不重复字符的出现的数量
    for(i=0;i<256;i++)  //初始化上述2个数组
    {
        t[i]=0;
        cnum[i]=0;
    }   
    //我们测试的源字符串,看看共出现多少个字符,每个字符出现的数量是多少
    char s[]="aaaaa;;;;aaaa346345t34fdgdfgsdrgweert";
    j=0;
    i=0;
    cout=0;
    while (1) //第一重循环按位处理源字符串中的每一位字符
    {
        t[j]=s[0]; //另t[]永远都放置源字符串中的首字符,直至字符串结束
        while(1)   //第2重循环的目标就是删除和首字符相同的所有字符(含首字符)
        {
            if(s[i]==t[j])
            {   //处理重复字符串
                delchr(s,i+1);
                cout++;    //保存重复的字符串的数量
                i=0;
            }
            else
            {   //处理不重复字符串
                i++;
            }
            if(s[i]=='\0')   //遇到结束符 退出循环
            {
                break;
            }
        }
        cnum[j]=cout;
        cout=0;
        j++;    //保存下一个不重复的字符
        i=0;
        if(s[0]=='\0') break;  //遇到结束符 退出循环
    }
    i=0;
    while(1)
    {
        if(t[i]=='\0') break;
        //打印上面保存的2个数组,一个放字符 一个放数量
        printf("字符%c出现的次数是%d\n",t[i],cnum[i]);
        i++;
    }

    return 0;
}

[ 本帖最后由 wp231957 于 2012-11-12 11:21 编辑 ]
搜索更多相关主题的帖子: 移动 include 字符串 
2012-11-12 11:19
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:13 
程序代码:
#include<stdio.h>

struct Count
{
    char c;
    int count;
};

int main()
{
    char test[]  = "aaaaa;;;;aaaa346345t34fdgdfgsdrgweert";
    struct Count conter[94];
    int i, len;
    //初始化
    for(i = 0; i < 94; i++)
    {
        conter[i].c = 32 + i;
        conter[i].count = 0;
    }
    len = sizeof(test) / sizeof(test[0]);
    for(i = 0; i < len; i ++)
    {
        conter[test[i]-32].count ++;
    }

    //打印输出
    for(i = 0; i < 94; i++)
    {
        if( conter[i].count )
        {
            printf("字符%c的个数是%d\n", conter[i].c, conter[i].count);
        }
    }
    return 0;
}

2012-11-12 11:30
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:13 
好长 帮顶了
2012-11-12 11:42
qq872551969
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:1
帖 子:241
专家分:1377
注 册:2012-7-13
收藏
得分:13 
求散分

编程交流请加群:【234181324】,一起学习,一起进步,新建的群,主打C语言和JAVA等程序设计,等待高手们的入驻,无论你是高手也好,新手也好,在这里都是平等的,欢迎你们的加入~!【234181324】
2012-11-12 12:19
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
看明白了

核心代码conter[test[i]-32].count ++;

DO IT YOURSELF !
2012-11-13 05:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我的思想是 找到一个全部删掉 再找下一个
你的想法是先把字符都存起来

DO IT YOURSELF !
2012-11-13 05:44
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这种方法还有一个特点

输出是有序的

DO IT YOURSELF !
2012-11-13 05:46
快速回复:我不太会写C代码的字符串程序,各位不要吝啬你们的意见啊 40 分放出 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024002 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved