| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 894 人关注过本帖
标题:一个C语言问题
只看楼主 加入收藏
xfkfzxl
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
一个C语言问题
户输入长度(数据个数)可变的数据,输入字母,则按字符排序;输入数字,则按数字排序;输入字母和数字的混合数据,则首先区分数字和字母,然后各自排序。 用两个数组保存字符和数字   用cin和cout  头文件包含<         .h>

这个单独输入我会,但是后面这个混合的怎么输啊 而且还得用被掉函数。。。。
搜索更多相关主题的帖子: 数据 数字 C语言 
2012-06-25 18:21
菜鸟0
Rank: 2
等 级:论坛游民
帖 子:37
专家分:91
注 册:2012-6-20
收藏
得分:0 
int k=0,j=0;    b[100];char c[100],a[100];
先用一个char a[100].收录所有的数字和字符。再用一个来一个个判断。
scanf("%s",a);
for(i=0;i!='/0';i++)    数组输入结束后系统会自动追加’/0',可以用来作为循环终止的条件。
if(a[i]>='0'&&a[i]<='9'){b[j]=a[i];j++;} 把数字和字母全当字符处理,0就变成了'0'。                  
else
{c[k]=a[i];k++;}
这样就可以把字母和数字分开了,分开后你再排序吧。。

这个不是很难,多练习练习就熟悉了。。。
我写得这个不能直接复制使用的,有些符号用搜狗输入法打不出来,即使打出来也不能被编译器识别。。自己看懂了就知道怎么弄了。
2012-06-25 19:22
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:3 
你既然能把两种情况单独会做,建议你还是自己把他们融合在一起,因为这个过程对你以后的影响很大,很多大的项目,工程主要问题是融合。你说的这种情况就是输入一堆字符,包括数字和字符,然后他们分出来。你可以把排序写成一个子函数,分离出来然后存在数组,最后调用排序函数。过程不重要,主要是思路。

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2012-06-25 19:26
huc小心
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2012-6-25
收藏
得分:3 
我照着书上例题的代码写的, 怎么还出错?
2012-06-25 19:46
xfkfzxl
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-25
收藏
得分:0 
回复 3楼 liufashuai
嗯 但是真实情况是 往年都是大二大三才让写 我大一 有很多都没讲 老师说自学...
2012-06-25 20:06
xfkfzxl
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-25
收藏
得分:0 
回复 3楼 liufashuai
#include<iostream.h>
void sort(char[]);
void sort(int[]);
const int N=20;
void main()
{
    char a[N],b[N];
    cout<<"input the array:";
    cin>>a>>b;
    sort(a);
    sort(b);
    cout<<"after sorted,the string is: "<<a<<"\t"<<b<<endl;
}

void sort(char x[])
{
    char t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort(int x[])
{
    int t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
这是单独写的 但是我不明白混合到一块时怎么分开,以及这时怎么用被调函数
2012-06-25 20:27
xfkfzxl
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-25
收藏
得分:0 
#include<iostream.h>
void sort(char[]);
void sort(int[]);
void sort1(char[]);
void sort1(int[]);
const int N=20;
void main()
{
    char a[N],b[N],c[N],d[N]={'\0'},f[N]={'\0'};
    cout<<"input the array:";
    cin>>a>>b>>c;
    sort(a);
    sort(b);
    sort1(d);
    sort1(f);
    int j=0,k=0;
    for(int i=0;i<=N,j!='\0',k!='\0';i++,j++,k++)   
        if(c[i]>='0'&&c[i]<='9')
        {
       d[j]=c[i];
        }                                                
        if((c[i]>='a'&&a[i]<='z')||(c[i]>='A'&&a[i]<='Z'))
        {
            f[k]=c[i];
        }
    cout<<"after sorted,the string is: "<<a<<"\t"<<b<<"\t"<<d<<"\t"<<f<<endl;
}

void sort(char x[])
{
    char t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort(int x[])
{
    int t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort1(char x[])
{
    char t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
void sort1(int x[])
{
    int t;
    for(int i=0;x[i];i++);
    int length=i;
    for(i=0;i<length-1;i++)
        for(int j=0;j<length-1-i;j++)
            if(x[j]<x[j+1])
            {
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
}
下面是小弟的运行结果:
input the array:wsx
456
wsx456
after sorted,the string is: xws 654             w
Press any key to continue
为什么 第三个混合输入时 结果只有一个‘w’呢 求解
2012-06-25 21:28
菜鸟0
Rank: 2
等 级:论坛游民
帖 子:37
专家分:91
注 册:2012-6-20
收藏
得分:0 
你写得好复杂啊。。。我也写了一个,可以拿去看一下。。运行结果没有问题。。
#include<stdio.h>
#include<stdlib.h>
main()
{char a[100],b[100],c[100];
int i,j=0,k=0;
scanf("%s",a);
for(i=0;a[i]!='\0';i++)
{if(a[i]>='0'&&a[i]<='9')
 {c[j]=a[i];j++;}
 else
 {b[k]=a[i];k++;}
}
c[j]=b[k]='\0';
printf("%s\n%s\n%s\n",a,b,c);
system("pause");
return 0;
}
这是把混合的数据分开用的,上次和你说时说的不对,这个是对的,你仔细看一下,对比一下,这个错误很容易犯。。
关于最后一个会出问题的解决方法在c[j]=b[k]='\0'。。。因为最后一次判断后J和k都自动加一了,加一又没有赋值,系统就随便给它一个数据。。
2012-06-26 10:01
野兽男孩Andy
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2012-6-26
收藏
得分:3 
回复 7楼 xfkfzxl
我运行怎么不行
2012-06-26 14:54
菜鸟0
Rank: 2
等 级:论坛游民
帖 子:37
专家分:91
注 册:2012-6-20
收藏
得分:3 
我试过了,没有问题啊。。可能是编译器不同吧。换个编译器试试。
2012-06-26 21:51
快速回复:一个C语言问题
数据加载中...
 
   



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

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