| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1602 人关注过本帖
标题:自己写的程序,关于指针的题目
只看楼主 加入收藏
YUILILI
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-25
结帖率:50%
收藏
已结贴  问题点数:6 回复次数:9 
自己写的程序,关于指针的题目
我先把题目打出来,再把我的代码弄出来。
找出一个字符串中最大的字符并把它放在最前面,其他字符向后顺序存放,如字符串student处理后为ustdent。

我用了指针数组,以及选择排序法。但是输出乱码。语法没错,找不出来是什么原因,求解。
程序代码:
#include"stdio.h"
#include"string.h"
#define N 50
int main()
{
    void max(char *ch[],int n);
    char *ch[50];
    int i;
    printf("input :\n");
    scanf("%c",ch);
    for(i=0; i<N; i++)
    printf("%c",ch[i]);
    
    max(ch,50);
    
    for(i=0; i<50; i++)
        printf("%c",ch[i]);
    
}

void max(char *ch[],int n)
{
    int i,j,k;
    char *a ;
    for(i=0; i<N-1; i++)
    {
        k=i;
        for(j=i+1; j<N; j++)
            if(ch[k]<ch[j])
                k = j;
                
        if (k!=i)
        {
            a = ch[k];
            ch[k] = ch[i];
            ch[i] = a;
        }
        
    }
}
搜索更多相关主题的帖子: color 最大的 字符串 
2016-05-06 19:42
a120750
Rank: 4
等 级:业余侠客
威 望:1
帖 子:63
专家分:243
注 册:2016-3-13
收藏
得分:1 
首先你先理解一下char *ch[50]这个是什么。。这是一个指针数组。指针数组怎么可以这样操作。。
2016-05-06 21:40
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:3 
程序代码:
#include<stdio.h>

void _fun(char *str)
{
    int i=0;
    char *p, max;
    p = str;
    max = *p;
    p++;
    for (; *p!='\0'; p++)
    {
        if (*p > max)
        {
            max = *p;
            i = p - str;
        }
    }
    p = str + i;
    for (; p > str; p--)
    {
        *p = *(p-1);
    }
    *p = max;
}

int main()
{
    char ch[]={"student\0"};
    printf("%s\n", ch);
    _fun(ch);
    printf("%s\n", ch);
}
2016-05-07 00:17
墨莫莫
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:29
专家分:102
注 册:2016-4-18
收藏
得分:0 
主函数应该在最后!
2016-05-07 08:42
YUILILI
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-25
收藏
得分:0 
回复 2楼 a120750
指针数组不是个常量么?跟普通数组不是一样使用的嘛?

勿忘初心
2016-05-08 11:00
YUILILI
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-25
收藏
得分:0 
回复 4楼 墨莫莫
主函数在最后?这个有区别的吗?我在主函数声明了函数了喔

勿忘初心
2016-05-08 11:07
YUILILI
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-4-25
收藏
得分:0 
回复 3楼 吹水佬
if语句里面的i = p - str;是什么意思呢?i不是int型的吗?那个地址相减之后赋给i吗?

勿忘初心
2016-05-08 12:26
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:2 
两个问题:
第一:如果把自定义函数void max(char *ch[],int n)这个放在main函数后面来写,那么你就必须得在头文件下面main函数上面之间进行函数原型的声明。
第二:你只是需要一组字符串,或者很多个字符保存在数组里。直接用一维数组即可。不需要指针数组。
楼主可能不理解指针数组,你声明了一个指针数组*ch[50](char类型的)
那么
ch  它就是第一个大小为2 个char的元素的地址  即ch[0][0]  可不是ch[0]一个char的元素的地址。在这里要明确这个问题。
ch+1  那就是第二个大小为2个char的元素的地址  即ch[1][0] 不是ch[1]一个char的元素的地址。
所以,从上面理解出来后,楼主应该明白,如果是声明这样的指针数组,下面的操作也就不行了。
所以,你想要用指针操作可以这样声明和定义

char* p;
char a[50]={"My name is John"};
p=&a[50];

不用指针操作则直接声明char a[50];直接操作数组a
收到的鲜花
  • YUILILI2016-05-08 16:06 送鲜花  2朵   附言:我很赞同

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-05-08 12:33
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
补充一句,编译器在执行时程序时,如果不在最上面声明一个函数原型,即使在main函数中调用了这个自定义函数,编译器无法识别这个函数的类型和函数名。这时就会报错了。所以写在main函数前面好一点,因为不需要进行函数原型声明。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-05-08 12:42
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用YUILILI在2016-5-8 12:26:47的发言:

if语句里面的i = p - str;是什么意思呢?i不是int型的吗?那个地址相减之后赋给i吗?

i用作地址偏移量,因处理短字符串,示例简单了点,不太严谨。
可用显式转换表达:
int i;
i = (int)(p - str);
或更可靠:
unsigned long i;
i = (unsigned long)(p - str);
2016-05-08 16:56
快速回复:自己写的程序,关于指针的题目
数据加载中...
 
   



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

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