这道题本身没什么难的 只是一个排序输出而已 但由于老师非要用动态开辟的方法
所以只能搞麻烦了
由于用不惯标准输入 只好使用好写的流输入了
mallc函数头文件是<stdlib.h>在c++中写<cstdlib>也行
在这里 我选择的的是插入法排序 毕竟较快
由于用c++编写的 使用标准c的童鞋忍耐一下吧
题目如下
申请动态空间存放字符串,将其排序后输出 | |||
| |||
description | |||
问题描述:用申请的动态开辟的内存空间存放n(0<=n<=20)个字符串,每个字符串的长度不超过50,将其保存,后排序输出。 要求:每个字符串占用的空间是用动态开辟的内存分配的。字符串排序和输出用自定义函数实现。 提示:可以用指针数组指向n个字符串。 | |||
input | |||
输入数据有多组,每组第一行是一个整数n(0<=n<=20),接下来是n行,每行是一个长度不超过50的字符串。 | |||
output | |||
输出排好序的字符串。每个字符串一行。 | |||
sample_input | |||
5 banana apple orange pear peach 4 green black white red | |||
sample_output | |||
apple banana orange peach pear black green red white |
看代码吧
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
char *a[50],str[100];
for(int i=0; i<n; i++)
{
cin>>str;
a[i]=(char *)malloc(strlen(str)*sizeof(char));//在这里 把指针数组开辟空间
strcpy(a[i],str);//这里赋值
}
char t[50];
for(int i=0; i<n; i++)//简单的插入排序
{
strcpy(t,a[i]);
int j;
for(j=i-1; j>=0&&(strcmp(t,a[j])<0); j--)
strcpy(a[j+1],a[j]);
strcpy(a[j+1],t);
}
for(int i=0; i<n; i++)
cout<<a[i]<<endl;
}
return 0;
}