| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2489 人关注过本帖
标题:找出 ASCLL 最大值字符放在第一位,并把该字符前的原字符向后顺序移动,运行 ...
取消只看楼主 加入收藏
lrcdddd
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2014-7-3
结帖率:11.11%
收藏
已结贴  问题点数:20 回复次数:4 
找出 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
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.027995 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved