自考C++,问个练习题

1,编写一个程序,将从键盘输入的n个字符串保存在一个一维数组A中,在输入字符串之前,先输入n的值,要求数组A需要动态申请空间,程序运行结束前再释放掉。
2,在题目一的基础上,输出n个字符串中最长的和最短的串,计算n个串的平均长度,并输出结果。

自学的,没有老师同学,挺尴尬的,给讲详细点吧。谢谢了。

#include <iostream>
using namespace std;
int main()
{
  int n,i;
  string *A;
  int max=0;
  int min = 0;
  int avg = 0;
  cin>>n;
  if(n>0)
  {
    A = new string[n];
    for(i=0;i<n;i++)
    {
      cin>>A[i];
      if(A[max].length() < A[i].length())
          max = i;
      if(A[min].length() > A[i].length())
          min = i;
      avg += A[i].length();
    }
    cout<<"最长的串:"<<A[max]<<endl;
    cout<<"最短的串:"<<A[min]<<endl;
    cout<<"平均长度:"<<avg/n<<endl;
    
    delete []A;
  }
  return 0;
}

题目1代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n;
    char* A=0;
    printf("请输入n的值:");
    scanf("%d",&n);
    A = (char*)malloc(n+1);
    printf("请输入字符串:");
    scanf("%s",A);
    A[n] = '\0';
    printf("字符串为:%s\n",A);
    free(A);
    return 0;
}

题目2代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int i,n;
    int max,min;
    int maxindex,minindex;
    float avg;
    char** A=0;
    printf("请输入n的值:");
    scanf("%d",&n);
    A = (char**)malloc(n*sizeof(char*));
    printf("请输入%d个字符串:",n);
    for (i=0;i<n;i++)
    {
        A[i] = (char*)malloc(100);
        scanf("%s",A[i]);
        if(i==0)
        {
            max = strlen(A[i]);
            min = max;
            maxindex=0;
            minindex = 0;
        }else
        {
            if(strlen(A[i]) > max)
            {
                maxindex = i;
                max = strlen(A[i]);
            }
            if(strlen(A[i]) < min)
            {
                minindex = i;
                min = strlen(A[i]);
            }
        }
        avg += strlen(A[i]);
    }
    avg /= n;
    printf("最长的串%s\n",A[maxindex]);
    printf("最短的串%s\n",A[minindex]);
    printf("平均长度:%f\n",avg);
    for (i=0;i<n;i++)
    {
        free(A[i]);
    }
    free(A);
    return 0;
}