第1题

描述
输入一个正整数n,然后输入n个字符串,最后输入一个正整数m(m<=n),要求输出第m个字符串

输入
一个正整数n,然后是n个字符串,最后是一个正整数m(m<=n)

输出
一个字符串,是输入的n个字符串中第m个字符串。不要换行。

样例输入
3

abc cd efg

2

样例输出
cd

思路

怎么说也是道签到题,但这道题有趣的并不是他的难易度,而是有关mallocnew两种不同动态分配方式的讨论

代码[C]

[Forlogin]
#include <stdio.h>
#include <string.h>
int main(){
    int m,n;
    scanf("%d",&m);
    char *p[m];
    for(int i=0;i<m;i++){
        p[i]=(char*)malloc(100*sizeof(char));
        scanf("%s",p[i]);
    }scanf("%d",&n);
    printf("%s",p[n-1]);
}[/Forlogin]

代码[C++]

[Forlogin]
#include <iostream>
#include <string.h>
using namespace std;
int main(){
    int m,n;
    cin>>m;
    char *p[m];
    for(int i=0;i<m;i++){
        p[i]=new char [10];
        cin>>p[i];
    }cin>>n;
    cout<<p[n-1];
}[/Forlogin]

有关malloc和new的区别

对于一个长期使用C语言的老鸟而言,malloc的熟练程度一定要比new要来的高
但是他们俩有什么区别呢?

首先来说一下他们的定义分别是什么

malloc

malloc的作用是分配所需的内存空间,并返回一个指向它的指针,是C语言stdlib.h库的一个库函数,下面是malloc的声明

void *malloc(size_t size)

malloc的返回值是指向已分配大小的内存的指针或null,且在未作特别规定的情况下指针类型位void
下面是malloc的用法实例(源自菜鸟教程)

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

int main()
{
   char *str;

   /* 最初的内存分配 */
   str = (char *) malloc(15);
   strcpy(str, "runoob");
   printf("String = %s,  Address = %u\n", str, str);

   /* 重新分配内存 */
   str = (char *) realloc(str, 25);
   strcat(str, ".com");
   printf("String = %s,  Address = %u\n", str, str);

   free(str);

   return(0);
}

以上运行结果的返回值是

String = runoob,  Address = 3662685808
String = runoob.com,  Address = 3662685808

new

new是C++的一种特殊运算符,而非库函数。下面是使用 new 运算符来为任意的数据类型动态分配内存的通用语法

new data-type;

这里着重讲解一下new的数组空间分配方法
一维数组

// 动态分配,数组长度为 m
int *array=new int [m];

//释放内存
delete [] array;

二维数组

int **array
// 假定数组第一维长度为 m, 第二维长度为 n
// 动态分配空间
array = new int *[m];
for( int i=0; i<m; i++ )
{
    array[i] = new int [n]  ;
}
//释放
for( int i=0; i<m; i++ )
{
    delete [] array[i];
}
delete [] array;

不同点

malloc与new不同的地方不仅在于他们的类型是函数还是运算符,更在于他们的分配方式与返回值。
分配方式不同
malloc的特点在于能够人为的为一个值分配在内存允许范围大小的空间,优点是直观、可改动性强
new的特点更像是“用多少拿多少”,能够根据数据变动自动从堆内分配内存,优点是简便
返回值不同
malloc返回的是指针,能够直接赋值给一个与其类型相同的左值
new返回所分配空间的地址(也有部分教材和文章认为返回的是指针),这点与malloc类型;同时new还能返回包括类或结构在内的自定义的任何数据类型,而这一功能是malloc没有的