bupt2024年大一上计导指针练习

6-29 实验10_2_动态内存分配函数_1

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

1、设计函数int * create(int n) ;,根据整数n创建一个长度为n的整型动态一维数组,并返回动态数组第一个元素的地址。

2、设计函数 void cal(int * array, int size) ;该函数可计算array 所指向的动态一维数组中存储的size个整数的和及平均值,同时寻找其中的最大值、最小值。

输入共两行,第一行为一个整数n(0<n<100)。第二行为n个用空格分隔的整数。第一行在主函数中输入,第二行需在函数cal中输入,并存储在 array 所指向的动态一维数组中。

输出共5行,前四行依次为和、平均值(精确到小数点后两位)、最大值、最小值。最后一行按原样输出输入的那n个整数。前四行需在函数cal中输出,最后一行由主函数输出。

测试数据保证所有整数可以用int型存储。出题者存储浮点数时用的是 float。

函数接口定义一:

int * create(int n) ;

其中 n 为整数数组的长度; 函数需返回动态数组第一个元素的地址。如果没有获得内存则返回NULL。

函数接口定义二:

void cal(int * array, int size) ;

其中 arraysize 都是用户传入的参数。 array 为整数数组的首地址; size 是数组中所存储的整数的个数。函数没有返回值。

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>


int * create(int n) ;
void cal(int * array, int size) ;

int main()
{
    int * array , n , i ;
    
    scanf( "%d", &n );
    
    array = create(n) ;
    if ( array == NULL )
        return -1 ; //这里的return是因为没有获得内存而直接结束程序。
         
    cal( array, n) ;
    for ( i = 0 ; i < n ; i++ )
    {
        printf("%d" , *(array+i) ) ;
        if ( i == n - 1 ) printf("\n") ;
        else printf(" ") ;
    }     
    
    free(array) ;
    
    return 0;
}

/* 请在这里填写答案 */

输入样例:

10
1 2 3 4 5 6 7 8 9 10

输出样例:

55
5.50
10
1
1 2 3 4 5 6 7 8 9 10

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int * create(int n)
{
    if(n <= 0)
        return NULL;
    else
        return (int*)malloc(n*sizeof(int));
}

void cal(int * array, int size)
{
    for(int i = 0; i < size; i++)
    {
        scanf("%d", array + i);
    }
    
    int sum = 0, max = *array, min = *array;
    for(int i = 0; i < size; i++)
    {
        sum += *(array + i);

        if(*(array + i) < min)
        {
            min = *(array + i);
        }

        if(*(array + i) > max)
        {
            max = *(array + i);
        }
    }

    float res = (float)sum/size;
    printf("%d\n%.2f\n%d\n%d\n", sum, res, max, min);
}

6-30 实验10_3_动态内存分配函数_2

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

1、设计函数char ** create1(int n) ;,根据整数n创建一个长度为n的字符型指针动态一维数组,并返回动态数组第一个元素的地址。

2、设计函数void create2( char ** strPtr , int n ) ;,为字符型指针动态一维数组strPtr中的每一个元素创建一个长度为n+1字符型动态一维数组。参数n为字符型指针动态一维数组strPtr的长度。

3、设计函数void fill(char ** strPtr , int n) ;按要求将相应的字符填入二维动态数组strPtr中(见样例)。

输入只有一行,为一个整数n(0<=n<=40)。

输出共2*n+1行,具体见样例。

函数接口定义一:

char ** create1(int n) ;

其中 n 是用户传入的参数,代表字符型指针动态一维数组的长度。 函数须返回动态数组第一个元素的地址。

函数接口定义二:

void create2( char ** strPtr , int n ) ;

其中 strPtrn 都是用户传入的参数,strPtr 为指向字符型指针动态一维数组的指针;n 代表字符型指针动态一维数组的长度。 函数没有返回值。

函数接口定义三:

void fill(char ** strPtr , int n);

其中 strPtrn 都是用户传入的参数,strPtr 为指向字符型指针动态一维数组的指针;n 要填充的字符的阶数,n阶时要填充2*n+1行,具体格式见样例。 函数没有返回值。

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>

char ** create1(int n) ;
void create2( char ** strPtr , int n ) ;
void fill(char ** strPtr , int n) ;


int main()
{
    int        n, i;
    char**    strPtr ;

    scanf("%d", &n );
    strPtr = create1( n * 2 + 1 ) ;
    create2( strPtr ,  n * 2 + 1 ) ;
    fill(strPtr , n) ;

    for (i = 0; i < 2 * n + 1; i++)
    {
        printf("%s\n" , strPtr[i]);
    }
    
    for ( i = 0 ; i < n * 2 + 1 ; i++ )
        free(strPtr[i]) ;
    free(strPtr) ;

    return 0;
}

/* 请在这里填写答案 */

输入样例一:

1

输出样例一:

 X
X X
 X

输入样例二:

5

输出样例二:

     X
    / \
   /   \
  /     \
 /       \
X         X
 \       /
  \     /
   \   /
    \ /
     X

输入样例三:

8

输出样例三:

        X
       / \
      /   \
     /     \
    /       \
   /         \
  /           \
 /             \
X               X
 \             /
  \           /
   \         /
    \       /
     \     /
      \   /
       \ /
        X

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

char ** create1(int n)
{
    char**head;
    head = (char**)malloc(n*sizeof(char*));
    return head;
}

void create2( char ** strPtr , int n )
{
    for(int i = 0; i < n; i++)
    {
        strPtr[i] = (char*)malloc((n + 1)*sizeof(char));
    }
}

void fill(char ** strPtr , int n)
{
    int i, j;
    if(n == 0)
    {
        strPtr[0][0] = 'X';
        for(i = 1; i < n * 2 + 1; i++)
        {
            strPtr[i][0] = '\0';
        }
    }
    else
    {
    for(i = 0; i < n; i++)
    {
        if(i == 0)
        {
            for(j = 0; j < n; j++)
            {
                strPtr[0][j] = ' ';
            }
            strPtr[0][j] = 'X';
            strPtr[0][j + 1] = '\0';
        }
        else
        {
            for(j = 0; j < n - i; j++)
            {
                strPtr[i][j] = ' ';
            }
            strPtr[i][j] = '/';
            for(j = n - i + 1; j < n + i; j++)
            {
                strPtr[i][j] = ' ';
            }
            strPtr[i][n + i] = '\\';
            strPtr[i][n + i + 1] = '\0';
        }
    }
    strPtr[n][0] = 'X';
    for(j = 1; j <= 2*n - 1; j++)
    {
        strPtr[n][j] = ' ';
    }
    strPtr[n][j] = 'X';
    strPtr[n][j + 1] = '\0';

    for(int i = n - 1; i >= 0; i--)
    {
        if(i == 0)
        {
            for(j = 0; j < n; j++)
            {
                strPtr[2*n][j]= ' ';
            }
            strPtr[2*n][j] = 'X';
            strPtr[2*n][j + 1] = '\0';
        }
        else
        {
            for(j = 0; j < n - i; j++)
            {
                strPtr[2*n - i][j] = ' ';
            }
            strPtr[2*n - i][j] = '\\';
            for(j = n - i + 1; j < n + i; j++)
            {
                strPtr[2*n - i][j] = ' ';
            }
            strPtr[2*n - i][j] = '/';
            strPtr[2*n - i][j + 1] = '\0';
        }
    }
    }
}

6-31 实验10_4_设计函数 locatesubstr

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

设计函数 char *locatesubstr(char *str1,char *str2),查找str2指向的字符串在str1指向的字符串中首次出现的位置,返回指向该位置的指针。若str2指向的字符串不包含在str1指向的字符串中,则返回空指针NULL。
注意这里必须使用指针而不是数组下标来访问字符串。

函数接口定义:

char *locatesubstr(char *str1,char *str2);

其中 str1str2 都是用户传入的参数,其含义如题面所述 。若查找成功则返回指向该位置的指针,若失败则返回空指针。

裁判测试程序样例:

#include <stdio.h>

char *locatesubstr(char *str1,char *str2);
int main()
{
    char str1[505],str2[505];
    char *p;
    gets(str1);
    gets(str2);
    p=locatesubstr(str1,str2);
    
    if(p==NULL)    printf("NULL!\n");
    else    puts(p);
    
    return 0;
}

/* 请在这里填写答案 */

输入样例:

didjfsd dabcxxxxxx
abc

输出样例:

abcxxxxxx

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

char *locatesubstr(char *str1,char *str2)
{
    char *str = NULL;
    int i, j;
    for(i = 0; str1[i] != '\0'; i++)
    {
        if(str1[i] == str2[0])
        {
            str = &str1[i];
            for(j = 1; str2[j] != '\0'; j++)
            {
                if(str1[i + j] != str2[j])
                {
                    str = NULL;
                    break;
                }
            }
            if(str != NULL)
            {
                break;
            }
        }
    }

    return str;
}

-32 实验10_5_指针数组初步

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个总长度不超过10000的字符串,字符串中只包含大写字母“A—Z”、小写字母“a—z”和空格‘ ’。空格用于分割单词,空格的个数不超过1000个。你的任务是将字符串中用空格分隔的单词打印出来。
你要按照如下要求完成任务:
1.利用指针数组指向每个单词的开始位置。
2.把字符串中单词结束后的空格改为“\0”,然后使用指针数组将每个单词打印出来。

测试用例保证至少有一个单词。

函数接口定义:

int getString( char * source , char *strPtr[] ) ;

其中 sourcestrPtr 都是用户传入的参数。 source 为待处理字符串; strPtr 是保存各个单词开始位置的指针数组。函数返回值为单词的个数。

裁判测试程序样例:

#include<stdio.h>

int getString( char * source , char *strPtr[] ) ;

int main()
{
    char    str[100005];
    char    *strPtr[1005]={0};
    int        i, num ;
    
    gets(str);
    num = getString( str , strPtr ) ;
    for( i = 0 ; i < num ; i++ )
        puts(strPtr[i]);
    
    return 0;    
}

/* 请在这里填写答案 */

输入样例:

You are great

输出样例:

You
are
great

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int getString( char * source , char *strPtr[] )
{
    int i = 0, k = 0;
    while(source[i] != '\0')
    {
        if(source[i] == ' ')
        {
            for(; source[i] == ' '; i++)
                source[i] = '\0';
        }
        else
        {
            strPtr[k] = &source[i];
            for(; source[i] != ' '&&source[i] != '\0'; i++)
                ;
                k++;
        }
    }

    return k;
}

6-32 实验10_5_指针数组初步

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个总长度不超过10000的字符串,字符串中只包含大写字母“A—Z”、小写字母“a—z”和空格‘ ’。空格用于分割单词,空格的个数不超过1000个。你的任务是将字符串中用空格分隔的单词打印出来。
你要按照如下要求完成任务:
1.利用指针数组指向每个单词的开始位置。
2.把字符串中单词结束后的空格改为“\0”,然后使用指针数组将每个单词打印出来。

测试用例保证至少有一个单词。

函数接口定义:

int getString( char * source , char *strPtr[] ) ;

其中 sourcestrPtr 都是用户传入的参数。 source 为待处理字符串; strPtr 是保存各个单词开始位置的指针数组。函数返回值为单词的个数。

裁判测试程序样例:

#include<stdio.h>

int getString( char * source , char *strPtr[] ) ;

int main()
{
    char    str[100005];
    char    *strPtr[1005]={0};
    int        i, num ;
    
    gets(str);
    num = getString( str , strPtr ) ;
    for( i = 0 ; i < num ; i++ )
        puts(strPtr[i]);
    
    return 0;    
}

/* 请在这里填写答案 */

输入样例:

You are great

输出样例:

You
are
great

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int getString( char * source , char *strPtr[] )
{
    int i = 0, k = 0;
    while(source[i] != '\0')
    {
        if(source[i] == ' ')
        {
            for(; source[i] == ' '; i++)
                source[i] = '\0';
        }
        else
        {
            strPtr[k] = &source[i];
            for(; source[i] != ' '&&source[i] != '\0'; i++)
                ;
                k++;
        }
    }

    return k;
}

6-33 实验10_8_设计函数 void delcharfun(char *str,char ch)

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

设计函数 void delcharfun(char *str,char ch)实现从字符串str中删除指定的字符ch。同一字母的大、小写按不同字符处理。

函数接口定义:

void delcharfun(char *str,char ch);

其中 strch 都是用户传入的参数。 str 为指向待删除数组的指针; ch 指定字符。函数没有返回值。

裁判测试程序样例:

#include<stdio.h>

void delcharfun(char *str,char ch);
 
int main()
{
    char    ch,str[110];
    
    scanf("%s",str);    //读入字符串 
    getchar();            //读取回车符号 
    scanf("%c",&ch);    //读入字符 
    delcharfun(str,ch);    //删除 
    printf("%s\n",str);    //输出删除后结果 
    return 0;    
}

/* 请在这里填写答案 */

输入样例:

abcABCabc#
b

输出样例:

acABCac#

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

void delcharfun(char *str,char ch)
{
    int i, j;
    for(i = 0; str[i] != '\0'; i++)
    {
        if(str[i] == ch)
        {
            for(j = i; str[j] != '\0'; j++)
            {
                str[j] = str[j + 1];
             }
            i--;
        }
    }
}

6-37 实验10_11_字符串排序(指针数组)

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

1、设计函数char ** create1( int n ) ;,根据整数n创建一个长度为n的字符指针型动态一维数组,并返回动态数组第一个元素的地址。

2、设计函数char * create2( int n ) ;,根据整数n创建一个长度为n的字符型动态一维数组,并返回动态数组第一个元素的地址。

3、设计函数void sort( char** strArray , int size ) ; ,该函数可将字符指针数组strArray所指向的所有字符串按从小到大排列。

输入第一行为一个不超过200的整数n,代表待排序字符串的个数。然后输入n个字符串,每个字符串长度不会超过100。

输出为排序后的n个字符串,每个字符串占一行。

函数接口定义一:

char **    create1( int n ) ;

其中 n 为字符指针数组的长度; 函数需返回动态数组第一个元素的地址。如果没有获得内存则返回NULL。

函数接口定义二:

char *    create2( int n ) ;

其中 n 为字符数组的长度; 函数需返回动态数组第一个元素的地址。如果没有获得内存则返回NULL。

函数接口定义三:

void    sort( char** strArray , int size ) ; 

其中 strArraysize 都是用户传入的参数。 strArray 为字符指针数组; size 是数组的长度。函数没有返回值。

裁判测试程序样例:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define        MAX        101

char **    create1( int n ) ;
char *    create2( int n ) ;
void    sort( char** strArray , int size ) ; 

int main()
{
    char**    strArray ;
    int        n , i ;
    
    scanf("%d",&n) ;
    strArray = create1( n ) ; 
    if ( strArray != NULL ) 
    {
        for ( i = 0 ; i < n ; i++ ) 
        {
            strArray[i] = create2( MAX ) ;
            if ( strArray[i] == NULL ) return -1 ;
        }            
    }
    else return -1 ;//这里两个 return -1 都是无法获得内存时直接结束程序 
    
    getchar();//吃掉前边输入的回车符 
    
    for( i = 0 ; i < n ; i++ ) 
        gets(strArray[i]); //读入字符串 
        
    sort( strArray , n ) ; //排序 
    
    for( i = 0 ; i < n ; i++ ) 
        printf("%s\n",strArray[i]); //输出
        
    for ( i = 0 ; i < n ; i++ )  
        free(strArray[i]) ;
    free(strArray) ;
    
    return 0;
}

/* 请在这里填写答案 */

输入样例:

5
bbb
zzzzzz
aabbbccc
aaaaaa
abbbbb

输出样例:

aaaaaa
aabbbccc
abbbbb
bbb
zzzzzz

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

char **    create1( int n )
{
    char** head;
    head = (char**)malloc(n*sizeof(char*));
    return head;
}

char * create2(int n)
{
    char*head = NULL;
    head = (char*)malloc(n*sizeof(char));
    return head;
}

void    sort( char** strArray , int size )
{
    char str[MAX] = {0};
    int i, j;
    for(i = 1; i <= size - 1; i++)
    {
        for(j = 0; j <= size - 1 - i; j++)
        {
            if(strcmp(strArray[j], strArray[j + 1]) > 0)
            {
                strcpy(str, strArray[j]);
                strcpy(strArray[j], strArray[j + 1]);
                strcpy(strArray[j + 1], str);
            }
        }
    }
}

7-54 实验10_6_动态分配内存_1

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知正整数n,你要利用malloc函数动态开辟一个长度为n的整型数组,然后读取n个整数存入该数组中。再将这n个整数全部改为其相反数(例如10的相反数是-10,-10的相反数是10)的10倍,然后将其输出。最后你要利用free函数将该动态数组所占用的空间释放。

提示:malloc与free的使用,以下代码即建立了一个长度为n的整型动态数组,并释放:

int *a,n;
scanf(“%d”,&n);
a=(int * )malloc(sizeof(int) * n);// 建立长度为n的动态整型数组
free(a);//释放动态内存。

输入格式:

为两行,第一行为一个正整数n,第二行为n个用空格分隔整数。测试用例保证所有整数可以用int存储,且为这n个整数申请内存不会超出内存限制。

输出格式:

输出只有一行,为用计算后的n个整数,这n个整数之间用一个空格分隔。

输入样例:

10
1 2 3 4 5 6 7 8 9 10

输出样例:

-10 -20 -30 -40 -50 -60 -70 -80 -90 -100

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *a, n;
    scanf("%d", &n);

    a = (int *)malloc(n*sizeof(int));

    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
        a[i] = -10*a[i];
    }

    for(int j = 0; j < n; j++)
    {
        printf("%d", a[j]);
        if(j == n - 1)
            printf("\n");
        else
            printf(" ");
    }

    free(a);
    return 0;
}

7-55 实验10_7_动态分配内存_2

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知正整数n、m,你要利用malloc函数动态开辟一个n行、m列的整型二维数组,然后读取nm个整数存入该数组中。再将这nm个整数全部改为其相反数的10倍,然后将其输出。最后你要利用free函数将该动态数组所占用的空间释放。

提示:malloc与free的使用,以下代码即建立了一个n行m列的整型二维动态数组,并释放:

int **a,n ,m;
scanf(“%d%d”,&n,&m);
a=(int **)malloc(sizeof(int *)*n);//建立长度为n的动态指针数组
for(i=0;i<n;i++)
a[i]=(int *)malloc(sizeof(int)*m);//建立长度为m的一维整型数组
for(i=0;i<n;i++)
free(a[i]);
free(a);//释放动态内存。

输入格式:

输入为两行,第一行为两个用空格分隔的正整数n,m,第二行为n*m个用空格分隔整数。测试用例保证所有整数可以用int存储,且为这n*m个整数申请内存不会超出内存限制。

输出格式:

输出按矩阵格式输出,具体见样例。

输入样例:

3 4
1 2 3 4 5 6 7 8 9 10 11 12

输出样例:

-10 -20 -30 -40
-50 -60 -70 -80
-90 -100 -110 -120

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int **a, n, m;
    scanf("%d%d", &n,&m);
    a = (int **)malloc(n*sizeof(int*));

    for(int i = 0; i < n; i++)
        a[i] = (int *)malloc(m*sizeof(int));

    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            scanf("%d", &a[i][j]);
            a[i][j] = a[i][j] * -10;
        }
    }

    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            if(j == m -  1)
                printf("%d\n", a[i][j]);
            else
                printf("%d ", a[i][j]);
        }
    }

    free(a);

    return 0;
}

7-56 实验10_9_指针数组进阶

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知正整数n,n的范围是1—100。你要从键盘读入n个字符串,每个字符串的长度不确定,但是n个字符串的总长度不超过100000。你要利用字符指针数组将这n个字符串按照ASCII码顺序进行升序排序,然后再打印到屏幕上。字符串中可能包含ASCII码中的任意字符,每个字符串以换行符结束输入。

要求:不允许定义如char str[100][100000];这样的二维数组,因为会极大的浪费内存空间。你应定义char str[100000];这样的存储空间,将n个字符串连续的存储在一维字符空间内,然后将这n个字符串的起始位置保存在字符指针数组中,再进行排序操作。

输入格式:

输入一个正整数n,代表待排序字符串的个数,n不超过100,然后是n个字符串,每个字符串的长度不确定,但至少包含1个字符。n个字符串的总长度不会超过100000。

输出格式:

排序后的n个字符串,每个字符串占一行。

输入样例:

4
Where there is hope ,there is a way.
Welcome Beijing.
Nice idea.
Have fun.

输出样例:

Have fun.
Nice idea.
Welcome Beijing.
Where there is hope ,there is a way.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int n;
    scanf("%d", &n);
    getchar();
    char str[100000];

    char *strPtr[n];
    strPtr[0] = str;

    for(int i = 0; i < n; i++)
    {
        gets(strPtr[i]);
        if(i != n - 1)
        {
            strPtr[i + 1] = strPtr[i] + strlen(strPtr[i]) + 1;
        }
    }

    char *tmp;
    for(int i = 1; i <= n - 1; i++)
    {
        for(int j = 0; j <= n - 1 - i; j++)
        {
            if(strcmp(strPtr[j], strPtr[j + 1]) > 0)
            {
                tmp = strPtr[j];
                strPtr[j] = strPtr[j + 1];
                strPtr[j + 1] = tmp;
            }
        }
    }

    for(int i = 0; i < n; i++)
    {
        puts(strPtr[i]);
    }

    return 0;
}

7-57 实验10_10_动态数组进阶

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知正整数n,n的范围不确定。从键盘读入n个字符串,每个字符串的长度小于1000,要保存到动态数组中。为了能访问到所有的字符串,需要建立一个长度为n的动态指针数组,用于保存n个字符数组的内存地址。在读入每个字符串时,用一个长度为1000的字符数组作为缓冲数组,将字符串读入并求出长度后,再动态分配空间,将缓冲数组中的字符串复制到新分配的动态空间中,并将动态空间的首地址保存到指针数组中。读完n个字符串后你要将这n个字符串按照ASCII码顺序升序排序,然后再打印到屏幕上。字符串中可能包含大小写字母“A-Z”、“a—z”与空格字符。每个字符串以换行符结束输入。

输入格式:

输入一个正整数n,代表待排序字符串的个数。然后输入n个字符串,每个字符串至少包含一个字符,占一行。

输出格式:

排序后的n个字符串,每个字符串占一行。

输入样例:

10
Bb b
zzz zzz
aab bbccc
aaabbaaa
abb bbb
ccidfjD
Aidj idj
Ccidf jD
sidfjijE EE
kkkkkk

输出样例:

Aidj idj
Bb b
Ccidf jD
aaabbaaa
aab bbccc
abb bbb
ccidfjD
kkkkkk
sidfjijE EE
zzz zzz

代码长度限制

16 KB

时间限制

2000 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int n;
    scanf("%d", &n);
    getchar();
    char str[1000];

    char **strPtr;
    strPtr = (char**)malloc(n*sizeof(char*));

    for(int i = 0; i < n; i++)
    {
        gets(str);
        strPtr[i] = (char*)malloc((strlen(str) + 1)*sizeof(char));
        strcpy(strPtr[i], str);
    }

    char *tmp;
    for(int i = 1; i <= n - 1; i++)
    {
        for(int j = 0; j <= n - 1 - i; j++)
        {
            if(strcmp(strPtr[j], strPtr[j + 1]) > 0)
            {
                tmp = strPtr[j];
                strPtr[j] = strPtr[j + 1];
                strPtr[j + 1] = tmp;
            }
        }
    }

    for(int i = 0; i < n; i++)
    {
        puts(strPtr[i]);
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值