| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2489 人关注过本帖
标题:找出 ASCLL 最大值字符放在第一位,并把该字符前的原字符向后顺序移动,运行 ...
只看楼主 加入收藏
lrcdddd
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2014-7-3
结帖率:11.11%
收藏
已结贴  问题点数:20 回复次数:5 
找出 ASCLL 最大值字符放在第一位,并把该字符前的原字符向后顺序移动,运行无结果,问题出在哪儿?
#include <stdio.h>
void main()
{
    void can(char *p);
    char str[100];
    printf("输入一段字符串:\n");
    gets(str);
    can(str);
}
void can(char *p)
{
    int i=0,k;
    char s1[100];
    for(k=1;p[k]!='\0';k++)
    {
       if(p[i]<p[k])
       {
           i=k;
       }
    }
    s1[0]=p[k];
    for(i=0;i<k;i++)
    {
       s1[i+1]=p[i];
    }
    while(p[k]!='\0')
    {
       s1[k++]=p[k++];
    }
    s1[k++]= '\0';
    printf("输出新字符串:%s\n",s1);
}
搜索更多相关主题的帖子: include 最大值 字符串 
2014-07-20 13:50
lrcdddd
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2014-7-3
收藏
得分:0 
for(i=1;p[i]!='\0';i++)
    {
       if(p[i]>p[k])
       {
           k=i;
       }
    }
改成这个样子还是不对,选择法,选择最大。
2014-07-20 14:09
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:20 
楼主说一下你的算法,或者说你的思路.

另外, p只是一个字符型的指针,它指向的是一个字符数据的地址,并不代表指向了一个数组,它下面的数据是否能让你用,程序自己都不知道.在用指针处理数组数据的时候,在相应的语句之前必然会有类似"指针=数组名"这样的赋值语句.

代码测试环境:  WinXP+C-Free5.0.
2014-07-20 14:23
lrcdddd
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2014-7-3
收藏
得分:0 
#include <stdio.h>
void main()
{
    void can(char *p);
    char str[100];
    printf("输入一段字符串:\n");
    gets(str);
    can(str);
}
void can(char *p)
{
    int k=0,i;
    char s1[200];
    for(i=1;p[i]!='\0';i++)
    {
       if(p[i]>p[k])
       {
           k=i;
       }
    }
    s1[0]=p[k];
    for(i=0;i<k;i++)
    {
       s1[i+1]=p[i];
    }
    while(p[k]!='\0')
    {
       s1[k+1]=p[k+1];
       k++;
    }
    s1[k++]= '\0';
    printf("输出新字符串:%s\n",s1);
}
这样做对了,至于楼上说的指针问题,其实指针变量做形参,就是引用地址,将实参数组名即字符数组首地址引入到函数是可以的。
2014-07-20 14:35
lrcdddd
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2014-7-3
收藏
得分:0 
我的思路就是先选出ASCLL码值最大的字符,然后另外设立一个字符数组,将变化的字符串赋予到该数组,然后输出新设立的字符数组。
2014-07-20 14:37
lrcdddd
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2014-7-3
收藏
得分:0 
#include <stdio.h>
void main()
{
    void can(char *p);
    char str[100];
    printf("输入一段字符串:\n");
    gets(str);
    can(str);
}
void can(char *p)
{
    int k=0,i;
    char s1[100];
    for(i=1;p[i]!='\0';i++)
    {
       if(p[i]>p[k])
       {
           k=i;
       }
    }
    for(i=0;i<k;i++)
        s1[i]=p[i];
    p[0]=p[k];
    for(i=0;i<k;i++)
    {
       p[i+1]=s1[i];
    }

    printf("输出新字符串:%s\n",p);
}
这样稍微简单点,输出原数组,能否有更简单一点的,敬请大家讨论
2014-07-20 15:20
快速回复:找出 ASCLL 最大值字符放在第一位,并把该字符前的原字符向后顺序移动 ...
数据加载中...
 
   



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

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