| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2583 人关注过本帖
标题:不知道哪里出错~求指教~
只看楼主 加入收藏
hllSaturn
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-12-20
结帖率:62.5%
收藏
已结贴  问题点数:5 回复次数:8 
不知道哪里出错~求指教~
Description

从键盘中输入一串字符串(长度不超过80个字符),假定输入的字符串中只含有字母和数字,请将字符串中的前导数字全部移到字符串的尾部,中间的数字保持不变。可使用数组或指针实现,不能使用字符串复制函数。

Input

输入一串字符串,长度不超过80个字符,只包含字母和数字,并且以数字开头和结束。

Output

输出移动后的字符串。

Sample Input


1234A5BC6DEF7G89

Sample Output


A5BC6DEF7G891234





# include <stdio.h>
# include <string.h>
int main (void)
{      
    char ch[80];
    int i;
    for(i=0;i<=80;i++)
    {
        ch[i]=getchar();
    }
    for(i=0;i<=80;i++)
    {
        if(ch[i]>=0&&ch[i]<=9)
           ch[i]=ch[strlen(ch)-1];
        else if(ch[i]<0&&ch[i]>9)
            break;
    }
    printf("%c",ch[80]);

}
搜索更多相关主题的帖子: include 字符串 键盘 字母 
2016-01-05 10:44
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:1 
直接输出版

程序代码:
# include <stdio.h>

int main (void)
{      
    char ch[80]={'\0'};
    char* p1=ch;
    char* p2=ch;
    gets(ch);
    for(;*p1!='\0';p1++)
        if(*p1>'9' || *p1<'0') break;
    printf("%s",p1);
    for(;p2<p1;p2++) printf("%c",*p2);
    return 0;
}

DO IT YOURSELF !
2016-01-05 13:20
hllSaturn
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-12-20
收藏
得分:0 
回复 2楼 wp231957
# include <stdio.h>

int main (void)
{      
    char ch[80]={'\0'};
    char* p1=ch;
    char* p2=ch;      这里没看懂,是分了两个数组么?
    gets(ch);
    for(;*p1!='\0';p1++)
        if(*p1>'9' || *p1<'0') break;
    printf("%s",p1);
    for(;p2<p1;p2++) printf("%c",*p2);      这句也没看懂~
    return 0;
}
我是新手~~水平很低~感谢大神指点~
2016-01-07 14:27
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用hllSaturn在2016-1-7 14:27:38的发言:

# include <stdio.h>

int main (void)
{      
    char ch[80]={'\0'};
    char* p1=ch;
    char* p2=ch;      这里没看懂,是分了两个数组么?  ---这里申明了2个指针变量 都指向ch的首地址 为什么要申明2个一样的变量
                                                      ---下面看代码就知道了
    gets(ch);
    for(;*p1!='\0';p1++)
        if(*p1>'9' || *p1<'0') break;
    printf("%s",p1);
    for(;p2<p1;p2++) printf("%c",*p2);      这句也没看懂~  ---在上一个字符串输出完毕之后接着输出从头开始的数字字符  结束输出标志
                                                               为p2<p1
    return 0;
}


DO IT YOURSELF !
2016-01-07 14:47
demon90s
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:121
注 册:2016-1-3
收藏
得分:1 
程序代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    char buf[80];
    char num_buf[80];
    int i, j, index = 0;

    printf("enter a string: ");
    scanf("%s", buf);

    // 得到第一个不是数字的小标
    for (i = 0; i < strlen(buf); i++)
    {
        if (!isdigit(buf[i]))
        {
            index = i;
            break;
        }
    }

    // 把数字序列存放起来
    for (i = 0; i < index; i++)
        num_buf[i] = buf[i];

    // 把数字序列后面的字符往前移动
    for (i = index; i < strlen(buf); i++)
    {
        buf[i-index] = buf[i];
    }

    // 把数字序列拷贝到原字符串后面
    for (i = strlen(buf)-index, j = 0; i < strlen(buf); i++, j++)
        buf[i] = num_buf[j];

    puts(buf);

    return 0;
}
2016-01-07 16:25
eFun
Rank: 6Rank: 6
等 级:禁止访问
威 望:1
帖 子:58
专家分:400
注 册:2015-12-27
收藏
得分:1 
二楼wp版主的代码涉嫌掩耳盗铃。题意是输出移动后的字符串,不是字符。
2016-01-07 16:46
a852268659
Rank: 1
等 级:新手上路
帖 子:4
专家分:1
注 册:2016-1-6
收藏
得分:1 
#include "stdio.h"
void sort(char string[],char temp[],int *k)
{
    int i;
    for(i=0;string[i]>=48&&string[i]<=57;i++)
    {
        temp[i]=string[i];
    }
    *k=i;
     temp[i]='\0';
}
void exchange(char *p1,char *p2,int *k)
{
    int i,j;
    for(i=0;p1[i]!='\0';i++)
    {
        p1[i]=p1[i+*k];
    }
    i=i-*k;
    for(j=0;p2[j]!='\0';j++,i++)
    {
        p1[i]=p2[j];
    }
    p1[i]='\0';
}



void main()
{
    char string[80],temp[40],*p1=string,*p2=temp;
    int i,*k=&i;
    printf("请输入长度小于80的字符:\n");
    gets(string);
    sort(string,temp,k);
   exchange(p1, p2,k);
   printf("交换后的字符:\n");
   puts(string);
}
2016-01-07 17:00
hllSaturn
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-12-20
收藏
得分:0 
回复 4楼 wp231957
能在这个基础上改么?/我还没有学指针~
 #include <stdio.h>
# include <string.h>
int main(void)
 {
    char ch[80];
    int i,j;
    for(i=0;i<80;i++)
    {
        scanf("%c",&ch[i]);
    }
    for(i=0;i<80;i++)
    {
        if(ch[i]>='0'&&ch[i]<='9')
        {
            j=strlen(ch)-1;
            ch[i]=ch[j];
            i--;
        }
        else break;
    }
     return 0;
}
2016-01-10 14:10
eFun
Rank: 6Rank: 6
等 级:禁止访问
威 望:1
帖 子:58
专家分:400
注 册:2015-12-27
收藏
得分:0 
用这个代码吧,完全满足你的要求,关键算法部分我都注释了,应该好理解:
程序代码:
# include <stdio.h>
int main (void)
{      
    char a,ch[80]={'\0'};
    int i,j,l;
    gets(ch);
    for(l=0;ch[l];l++);  //得到字符串长度
    while(ch[0]>='0'&&ch[0]<='9') //移啊移啊,移到第一个字符不是数字为止
    {
        a=ch[0]; 
        for(i=0;i<l;i++)ch[i]=ch[i+1];
        ch[l-1]=a;   //字符串整体前移一次,ch[0]接到最后
    }
    printf("%s\n",ch);  //输出字符串
}
2016-01-10 14:47
快速回复:不知道哪里出错~求指教~
数据加载中...
 
   



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

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