| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6642 人关注过本帖, 2 人收藏
标题:输入一个含若干字符的字符串,分别找出字母和数字,其余字符忽略,将重复的 ...
只看楼主 加入收藏
jingtaichuan
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-21
收藏(2)
 问题点数:0 回复次数:8 
输入一个含若干字符的字符串,分别找出字母和数字,其余字符忽略,将重复的去掉后分别按从小到大的顺序输出。
本人初学,望高人指点,谢过!!!
搜索更多相关主题的帖子: 字符 字母 顺序 数字 从小到大 
2008-11-12 17:34
hokers
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2008-11-9
收藏
得分:0 
//程序还有问题,查不多来,随帮我分析下,谢谢.

#include <stdio.h>
void paixu(char a[],int n);
int del(char a[],int n);

void main()
{
    char ch[100];
    char num[100];
    char str[200];
    int n=0,c=0;
    int line;
    scanf("%s",str);
    for(int i=0;str[i]!='\0';i++)
    {
        if((str[i]>=0x41 && str[i]<=0x5a) || (str[i]>=0x61 && str[i]<=0x7a))
            {ch[c]=str[i];
            c++;}
        else
            if(str[i]>=0x30 && str[i]<=0x39)
            {num[n]=str[i];
            n++;}
    }
    ch[c]='\0';
    num[n]='\0';
    c-=1;
    n-=1;
    paixu(num,n);
    line=del(num,n);
    for(i=0;i<line+1;i++)
        printf("%c",num[i]);
    printf("\n");
    paixu(ch,n);
    line=del(ch,n);
    for(i=0;i<=line+1;i++)
        printf("%c",ch[i]);
    printf("\n");
}

void paixu(char a[],int n)
{
    int i,j;
    char t;
    for(i=1;i<=n;i++)
        for(j=0;j<=n-i;j++)
            if(a[j]>a[j+1])
                {    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
}

int del(char a[],int n)            
{
    int x,y,t=0;
    for(x=1;x<=n;x++)
        for(y=0;y<=n-x;y++)
            if(a[y]==a[y+1])
            {for(t=y+1;t<=n-y;t++)
                    a[t]=a[t+1];
            n-=1;}
            a[n+1]='\0';
    return n;
}

[[it] 本帖最后由 hokers 于 2008-11-12 22:49 编辑 [/it]]
2008-11-12 21:07
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
试着写了一个,还请大家多挑毛病。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 100
int cmp(const void *a,const void *b)/*排序函数中的比较函数*/
{
    return (*(char *)a-*(char *)b);
}
void input(char *a)/* 输入 */
{
    printf("input a[]:\n");
    scanf("%s",a);
}
void _sort(char *a) /* 排序 */
{
    qsort(a,strlen(a),sizeof(a[0]),cmp);
}
void _del(char *a) /*删除相同字符的函数 */
{
    int i,j,t;
    char b[N]; /* 定义个字符型数组,用于拷贝 */
    t=strlen(a); /* 得出字符串 a 的长度+1 */
    for(i=0;i<t;++i)
        for(j=i+1;j<t;++j)
            if(a[i]==a[j]) /* 当发现相同的两个字符时 */
            {
                while(a[j]==a[j+1]) /* 往下比较,直到发现不相同的字符 */
                    j++;
                strcpy(b,a); /* 拷贝字符串 a 到 b 中 */
                b[i]=0; /* 截取发现相同字符的位置 */
                strcat(b,&a[j]); /*把中间相同的字符舍弃,然后把字符串 a 接到 b 上*/
                strcpy(a,b); /* 把新的字符串 b 拷贝到 a 上*/
                t=strlen(a); /* 测出新的 a 串的长度+1 */
                break; /* 跳出本次循环 */
            }
}
int main(void)
{
    int i=0,j,k;
    char a[N];
    char Char[N],num[N];
    input(a); /* 输入字符串 */
    for(k=j=0;i<strlen(a);++i)
    {
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
            Char[j++]=a[i]; /* 当发现字符时,存入存储字符的字符串  */
        if(a[i]>='0'&&a[i]<='9')
            num[k++]=a[i]; /* 当发现数字时,存入存储数字的字符串 */
    }
    Char[j]=num[k]=0; /* 添加结束标记 */
    _sort(Char);
    _sort(num);  /* 排序 */
    _del(Char);
    _del(num);  /* 删除相同的字符 */
    puts("char="); /*  输出  */
    puts(Char);
    puts("num=");
    puts(num);
    return 0;
}








2008-11-13 02:46
hokers
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2008-11-9
收藏
得分:0 
看拉下,是我的DEL出拉问题,逻辑错误,借用拉你的DEL函数好象没问题,有时间再看修改下.

#include <stdio.h>
#include <string.h>
void paixu(char a[],int n);
void del(char a[]);

void main()
{
    char ch[100];
    char num[100];
    char str[200];
    int n=0,c=0;
    printf("输入字符串: ");
    scanf("%s",str);
    for(int i=0;str[i]!='\0';i++)
    {
        if((str[i]>=0x41 && str[i]<=0x5a) || (str[i]>=0x61 && str[i]<=0x7a))
            {ch[c]=str[i];
            c++;}
        else
            if(str[i]>=0x30 && str[i]<=0x39)
            {num[n]=str[i];
            n++;}
    }
    ch[c]='\0';
    num[n]='\0';
    c-=1;
    n-=1;
    paixu(num,n);
    del(num);
    paixu(ch,n);
    del(ch);
    printf("数字: ");
    puts(num);
    printf("\n");
    printf("字母: ");
    puts(ch);
    printf("\n");
}

void paixu(char a[],int n)
{
    int i,j;
    char t;
    for(i=1;i<=n;i++)
        for(j=0;j<=n-i;j++)
            if(a[j]>a[j+1])
                {    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
}

void del(char a[])            
{
   int i,j,t;
    char b[100]; /* 定义个字符型数组,用于拷贝 */
    t=strlen(a); /* 得出字符串 a 的长度+1 */
    for(i=0;i<t;++i)
        for(j=i+1;j<t;++j)
            if(a[i]==a[j]) /* 当发现相同的两个字符时 */
            {
                while(a[j]==a[j+1]) /* 往下比较,直到发现不相同的字符 */
                    j++;
                strcpy(b,a); /* 拷贝字符串 a 到 b 中 */
                b[i]=0; /* 截取发现相同字符的位置 */
                strcat(b,&a[j]); /*把中间相同的字符舍弃,然后把字符串 a 接到 b 上*/
                strcpy(a,b); /* 把新的字符串 b 拷贝到 a 上*/
                t=strlen(a); /* 测出新的 a 串的长度+1 */
                break; /* 跳出本次循环 */
            }

}
2008-11-13 06:24
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
#include <stdio.h>
void func(char * a,char * flag)
{
    for(char *p=a;*p;p++)
        if(((*p>='0')&&(*p<='9'))||((*p>='a')&&(*p<='z'))||((*p>='A')&&(*p<='Z')))
            flag[*p]++;
}
int main(void)
{
    char flag[130]={0},a[200];
    int i;
    printf("input a[]:\n");
    gets(a);
    func(a,flag);
    for(i=0;i<130;i++) if(flag[i]) printf("%c",i);
    printf("\n");
    return 0;
}
2008-11-13 08:35
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
#include <stdio.h>
void main(void)
{
    char flag[130]={0},a[200],*p;
    gets(a);
    for(p=a;*p;p++)
        if(((*p>='0')&&(*p<='9'))||((*p>='a')&&(*p<='z'))||((*p>='A')&&(*p<='Z'))) flag[*p]++;
    for(int i=0;i<130;i++)
        if(flag[i]) printf("%c",i);
    printf("\n");
}
2008-11-13 08:40
danielxu
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2008-10-30
收藏
得分:0 
三楼的qsort(a,strlen(a),sizeof(a[0]),cmp);这个函数实体我怎么找不到。。。。望指点qsort应该不是集成函数吧?
2008-11-13 08:41
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
回复 7# 的帖子
qsort 库函数
2008-11-13 08:44
danielxu
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2008-10-30
收藏
得分:0 
哦。。。谢谢
2008-11-13 08:59
快速回复:输入一个含若干字符的字符串,分别找出字母和数字,其余字符忽略,将重 ...
数据加载中...
 
   



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

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