| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 870 人关注过本帖
标题:原来还可以这样,嗯
只看楼主 加入收藏
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
结帖率:100%
收藏
 问题点数:0 回复次数:9 
原来还可以这样,嗯
程序代码:
#include<stdio.h>
#include<string.h>
void select(char *p[],int n)
{
    int i, j, m;
    char *t;
    for (i = 0; i < n - 1; i++)
    {
        m = i;
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(p[m], p[j]) > 0)
                m = j;
        }
        if (i != m)
        {
            t = p[i];
            p[i] = p[m];
            p[m] = t;
        }
    }
}

void print(char *p[], int n)
{
    int i;
    for (i = 0; i < n; i++)
        printf("%s\n", p[i]);
}

int main()
{
    void select(char *p[], int n);
    void print(char *p[], int n);
    char a[5][5];
    int i;
    char *p[5];
    for (i = 0; i < 5; i++)
        p[i] = a[i];
    for (i = 0; i < 5; i++)
        gets_s(p[i],5);
    select(p, 5);
    print(p, 5);
    return 0;
}
搜索更多相关主题的帖子: color 
2017-01-23 19:38
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
改了改,好像不能改成*p
程序代码:
#include<stdio.h>
#include<string.h>
void select(char *a[],int n)
{
    int i, j, m;
    char *t, **p;
    p = &a[0];
    for (i = 0; i < n - 1; i++)
    {
        m = i;
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(p[m], p[j]) > 0)
                m = j;
        }
        if (i != m)
        {
            t = p[i];
            p[i] = p[m];
            p[m] = t;
        }
    }
}

void print(char *p[], int n)
{
    int i;
    for (i = 0; i < n; i++)
        printf("%s\n", p[i]);
}

int main()
{
    void select(char *a[], int n);
    void print(char *p[], int n);
    char a[5][5];
    int i;
    char *p[5];
    for (i = 0; i < 5; i++)
        p[i] = a[i];
    for (i = 0; i < 5; i++)
        gets_s(p[i],5);
    select(p, 5);
    print(p, 5);
    return 0;
}

2017-01-23 21:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
这个就是交换指针啊~还涉及到指针传参哩~嗯~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-23 21:37
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用see235959850在2017-1-23 21:16:18的发言:

改了改,好像不能改成*p

*p是最基础的指针表达方式,存储中的任何数据都可以用*p来表达。
数组名 a 表达的是数组的基址,定义一个指针p指向a就可以用p来操作a数组的元素。
如:
#include <stdio.h>
main()
{
    char a[5][5]={"1111", "2222", "3333", "4444", "5555"};
    char *p = (char *)a;
    int i;
    for (i=0; i<5; i++, p+=5)
        printf("%s\n", p);
}
2017-01-24 00:29
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
依旧不能用*p
程序代码:
#include<stdio.h>
#include<string.h>
void select(char *a[],int n)
{
    int i, j, m;
    char *t, **p;
    p = &a[0];
    for (i = 0; i < n - 1; i++)
    {
        m = i;
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(p[m], p[j]) > 0)
                m = j;
        }
        if (i != m)
        {
            t = p[i];
            p[i] = p[m];
            p[m] = t;
        }
    }
}

void print(char *a[], int n)
{
    int i;
    char **p;
    p = &a[0];
    for (i = 0; i < n; i++)
        printf("%s\n", *p++);
}

int main()
{
    void select(char *a[], int n);
    void print(char *p[], int n);
    char a[5][5];
    int i;
    char *p[5];
    for (i = 0; i < 5; i++)
        p[i] = a[i];
    for (i = 0; i < 5; i++)
        gets_s(p[i],5);
    select(p, 5);
    print(p, 5);
    return 0;
}
2017-01-24 08:30
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用see235959850在2017-1-24 08:30:14的发言:

依旧不能用*p

指针只是一个名称,指针是通过地址来表现的。地址也是一个数值,地址列表也就是一个数值列表。
#include<stdio.h>
#include<string.h>

void select(unsigned long *p, int n)
{
    int i, j;
    unsigned long *pj, *pMin;
    for (i=0; i<n-1; i++,p++)
    {
        pMin = p;
        for (j=i+1,pj=p+1; j<n; j++,pj++)
            if (strcmp((char *)*pMin, (char *)*pj) > 0)
                pMin = pj;
        if (pMin != p)
        {
            *pMin ^= *p;
            *p ^= *pMin;
            *pMin ^= *p;
        }
    }
}

void print(unsigned long *p, int n)
{
    int i;
    for (i=0; i<n; i++)
        printf("%s\n", *p++);
}

main()
{
    char a[5][5]={"22","1","5","333","4444"};
    int i;
    unsigned long p[5];
    for (i = 0; i < 5; i++)
        p[i] = (unsigned long)a[i];
    select(p, 5);
    print(p, 5);
}
2017-01-24 11:22
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
又改了改
程序代码:
#include<stdio.h>
#include<string.h>
void sort(char a[5][5])
{
    int i, j;
    char *p, t[5];
    p = t;
    for(i=0;i<4;i++)
        for(j=0;j<4-i;j++)
            if (strcmp(a[j], a[j + 1]) > 0)
            {
                strcpy_s(p, 5, a[j]);
                strcpy_s(a[j], 5, a[j + 1]);
                strcpy_s(a[j + 1], 5, p);
            }
}

void print(char a[5][5])
{
    int i;
    for (i = 0; i < 5; i++)
        printf("%s\n", a[i]);
}

int main()
{
    void sort(char a[5][5]);
    void print(char a[5][5]);
    char a[5][5];
    int i;
    for (i = 0; i < 5; i++)
        gets_s(a[i], 5);
    sort(a);
    print(a);
    return 0;
}
2017-01-24 11:31
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 7楼 see235959850
觉得还是用地址索引表(*p[])来处理效率高点。
2017-01-24 11:34
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
又改了改
程序代码:
#include<stdio.h>
#include<string.h>
void sort(char a[5][5])
{
    int i, j;
    char *p, t[5];
    p = t;
    for(i=0;i<4;i++)
        for(j=0;j<4-i;j++)
            if (strcmp(a[j], a[j + 1]) > 0)
            {
                strcpy_s(p, 5, a[j]);
                strcpy_s(a[j], 5, a[j + 1]);
                strcpy_s(a[j + 1], 5, p);
            }
}

void input(char a[5][5])
{
    int i;
    for (i = 0; i < 5; i++)
        gets_s(a[i], 5);
}

void print(char a[5][5])
{
    int i;
    for (i = 0; i < 5; i++)
        printf("%s\n", a[i]);
}

int main()
{
    void sort(char a[5][5]);
    void input(char a[5][5]);
    void print(char a[5][5]);
    char a[5][5];
    input(a);
    sort(a);
    print(a);
    return 0;
}
2017-01-24 11:36
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
又改了改
程序代码:
#include<stdio.h>
#include<string.h>
void input(char(*p)[5])
{
    int i;
    for (i = 0; i < 5; i++)
        gets_s(p[i]);
}

void sort(char(*p)[5])
{
    int i, j;
    char *t, temp[5];
    t = temp;
    for(i=0;i<4;i++)
        for(j=0;j<4-i;j++)
            if (strcmp(p[j], p[j + 1]) > 0)
            {
                strcpy_s(t, 5, p[j]);
                strcpy_s(p[j], 5, p[j + 1]);
                strcpy_s(p[j + 1], 5, t);
            }
}

void print(char(*p)[5])
{
    int i;
    for (i = 0; i < 5; i++)
        printf("%s\n", p[i]);
}

int main()
{
    void input(char(*p)[5]);
    void sort(char(*p)[5]);
    void print(char(*p)[5]);
    char a[5][5];
    input(a);
    sort(a);
    print(a);
    return 0;
}
2017-01-24 12:04
快速回复:原来还可以这样,嗯
数据加载中...
 
   



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

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