| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3671 人关注过本帖, 1 人收藏
标题:崩溃了。出不来结果。求高手帮我看看我编的源码。。从键盘随意输入字符存入 ...
只看楼主 加入收藏
rapher
Rank: 2
等 级:论坛游民
帖 子:36
专家分:10
注 册:2011-5-27
结帖率:71.43%
收藏(1)
已结贴  问题点数:20 回复次数:11 
崩溃了。出不来结果。求高手帮我看看我编的源码。。从键盘随意输入字符存入一维数组,使字母符号数字分别在一起,输出数组。
具体题目的要求是:从键盘随意输入一组字符串存入一维数组中,不得再定义其他数组。调整数组中各元素的位置。是字母,符号,数字分别放在一起,输出调整后的数组。。。
我的想法是借鉴冒泡排序。判断字母或者数字。然后将字母升上去。将数字降下来。。。但是编了出来。程序能通过。就是出不了结果。。高手帮帮菜鸟呀。。
编了一晚上。。崩溃呀。。


# include "stdio.h"
#define N 10
void main()
{int a[N],i,j,m,k,q,z,w,x;
L1:printf ("please input number:\n");
 for (i=0;i<N;i++) scanf("%c",&a[i]);
 for (z=0;z<N-1;z++)        
 {for (k=0;k<N;k++)
 {m=N-k;
  if((a[m]>='a'&&a[m]<='z')||(a[m]>='A'&&a[m]<='Z'))
  {q=a[m-1];a[m-1]=a[m];a[m]=q;}
 }
 }
  for (w=0;w<N;w++)
  {for (x=0;x<N-1;x++)
  {if(a[x]>=0&&a[x]<=9)
  {q=a[x+1];a[x+1]=a[x];a[x]=q;}
  }
  }
 
 for (j=0;j<N;j++) printf("%c",a[j]);
 goto L1;
}
搜索更多相关主题的帖子: 字符串 符号 键盘 元素 
2011-05-27 08:44
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
直接排序就可以得到这种效果

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-27 08:52
rapher
Rank: 2
等 级:论坛游民
帖 子:36
专家分:10
注 册:2011-5-27
收藏
得分:0 
回复 2楼 ansic
直接排序是什么方法。。才学c几天。。请高手支招。。

不过这个字符串含有字母。字符。数字呀。。要对它们排序呀。。
2011-05-27 08:54
rapher
Rank: 2
等 级:论坛游民
帖 子:36
专家分:10
注 册:2011-5-27
收藏
得分:0 
回复 2楼 ansic
本来我想直接用ascii判断大小的。。但是字符的ascii码混杂在0~9,a~z,A~Z前后和之间呀。。直接排有字符的话应该就没办法了吧、、
2011-05-27 08:59
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:2 
#include <stdio.h>
#include <ctype.h>
#define  MAX 20
#define  exchange(m,n,temp) (temp = m , m = n, n = temp)
 
int main(int argc, char *argv[])
{
    int al_num, dig_num, i, j, p, q;
    char ch_ar[MAX], temp;
   
    puts("input a str to handle:");
    fgets(ch_ar, 20, stdin);
   
    al_num = dig_num = 0;
        
    for(i = 0; ch_ar[i] != '\0'; i++)
    {
        if(isdigit(ch_ar[i]))
        {
            dig_num ++;
        }
        if(isalpha(ch_ar[i]))
        {
            al_num ++;
        }
    }   
   
    for(i = 0; i < dig_num + al_num; i++)
    {
        for(j = i + 1; ch_ar[j] != '\0'; j++)
        {
            if(i < dig_num && isdigit(ch_ar[j]) && !isdigit(ch_ar[i]))
            {
                exchange(ch_ar[i], ch_ar[j], temp);
                break;
            }
            if(i >= dig_num && isalpha(ch_ar[j]) && !isalpha(ch_ar[i]))
            {
                exchange(ch_ar[i], ch_ar[j], temp);
                break;
            }
        }
    }
   
    printf("%s", ch_ar);
    return 0;
}
按照ASCII排序是不行的吧。。
2011-05-27 10:04
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:0 
本来可以简化的,变量p,q就没有用了,。
2011-05-27 10:06
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:10 
来个啰嗦版的!
程序代码:
#include"stdio.h"
#define N 11
int main()
{
    int a=0,b=0;
    int i=0,j,k,l;
    char arry[N],*p=arry,temp;
    printf("Input(不超过10个字符):\n");
    gets(arry);
    while(*(p+i))
    {
        if(*(p+i)>='A'&&*(p+i)<='Z'||*(p+i)>='a'&&*(p+i)<='z')//统计字符串中字母个数
        {
            a++;
        }
        else if(*(p+i)>='1'&&*(p+i)<='9')//统计数字个数
        {
            b++;
        }
        i++;//字符个数 
    }
    j=i;
    for(k=0;k<a;++k) 
    {
        for(l=j;l>=k;--l)
        {
            if(*(p+k)>='A'&&*(p+k)<='Z'||*(p+k)>='a'&&*(p+k)<='z')//如果左边字符为字母,跳到下一个字符
            {
                break;
            }
            else if(!(*(p+k)>='A'&&*(p+k)<='Z'||*(p+k)>='a'&&*(p+k)<='z')&&(*(p+l)>='A'&&*(p+l)<='Z'||*(p+l)>='a'&&*(p+l)<='z'))//如果左边不是字母,右边是字母,交换
            {
                temp=*(p+k);
                *(p+k)=*(p+l);
                *(p+l)=temp;
            }
            else
                continue;//两边都不是字母,右边跳到下一个字符
        }
    }
    for(k=a;k<a+b;++k)//同理
    {
        for(l=j;l>=k;--l)
        {
            if(*(p+k)>='1'&&*(p+k)<='9')
            {
                break;
            }
            else if((!(*(p+k)>='1'&&*(p+k)<='9'))&&(*(p+l)>='1'&&*(p+l)<='9'))
            {
                temp=*(p+k);
                *(p+k)=*(p+l);
                *(p+l)=temp;
            }
            else
                continue;
        }
    }
    //字母和数字都排好了,其他自然就排好了!
    puts(arry);
    return 0;
}





图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 liangjinchao 于 2011-5-27 10:26 编辑 ]

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-05-27 10:21
rapher
Rank: 2
等 级:论坛游民
帖 子:36
专家分:10
注 册:2011-5-27
收藏
得分:0 
回复 7楼 liangjinchao
大侠!我喜欢你的啰嗦版。可读性好强。。

不过(*p)这个应该是运用到指针和寻址了?

是不是这个题确实没法再用ascii码来做了?
2011-05-27 10:36
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:8 
程序代码:
#include <stdio.h>
#include <string.h>

void sort(char * str, int size) {
    int i, j, k;
    for(i = 0; i < size - 1; i++) {
        k = i;
        for(j = i + 1; j < size; j++) {
            if(str[j] < str[k]) {
                k = j;
            }
        }
        if(k != i) {
            str[k] ^= str[i];
            str[i] ^= str[k];
            str[k] ^= str[i];
        }
    }
}

int main(void) {
    char str[81];
    scanf("%s", str);
    sort(str, strlen(str));
    printf("%s\n", str);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

My life is brilliant
2011-05-27 11:21
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
回复 8楼 rapher
汗,别叫大侠,还是一只菜鸟而已,都是互相学习而已!
第一个问题:是的!
第二个问题:还真没想过用ASCII码来做,你请ansic同学给个思路吧!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-05-27 14:41
快速回复:崩溃了。出不来结果。求高手帮我看看我编的源码。。从键盘随意输入字符 ...
数据加载中...
 
   



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

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