利用指针数组实现字符串排序


#include
#include
using namespace std;
int strSort(char**p,int n);
int main()
{
    int i=0,j;
    char str[i];
    cout<<"请输入你想输入的字符串的个数"<>i;
    cout<<"请输入你想输入的字符串"<for(j=0;j>str[j];
    }
    char*p1=&str[0]; 
    strSort(&p1,i);
    cout<<"排序后的结果为"<for(j=0;jint strSort(char**p,int n)
{
    char*temp;
    int i,j;
    for(i=0;i-1;i++)
    {
        for(j=0;j-1;j++)
        {
            if(strcmp(*(p+j),*(p+1+j))>0)
            {
                temp=*(p+j);
                *(p+j)=*(p+1+j);
                *(p+1+j)=temp;
                
                
            }
        }
    }
}
想用传递指针数组的方法来实现字符串的排序,但是在输入的时候输入一个字符串就终止程序了也没有后续操作的执行是为什么

把str定义为包含字符指针变量的数组,然后再用一个二维字符数组存储输入的各个字符串,再让str的各个指针变量指向二维字符数组的各个字符串,最后把str作为参数传入函数 strSort即可。

参考资料:
C Primer Plus(第6版 中文版)- 第11章 字符串和字符串函数 - 11.6 字符串示例:字符串排序 - 11.6.1 排序指针而非字符串 (第359页 、360页、361页)

 
 
#include<iostream>
#include<string.h>
using namespace std;
int strSort(char**p,int n);
int main()
{
    int i=0,j;
    
    cout<<"请输入你想输入的字符串的个数"<<endl;
    cin>>i;
    char * str[i];  // 包含i个字符指针的数组 
    char strs[i][30];  // 包含i个30个字符的字符数组的数组,即二维字符数组,用于存储i个字符串 
    cout<<"请输入你想输入的字符串"<<endl;
    for(j=0;j<i;j++){
         
          cin>>strs[j]; // 把输入的字符串存储到二维字符数组第j个元素位置 
          str[j]=strs[j];  // 让str的第j个字符指针指向 strs中第j个字符串 
         // cout<<"str["<<j<<"]="<<str[j]<<endl;
    }
    //char*p1=str; 
    strSort(str,i);
    cout<<"排序后的结果为"<<endl;
    for(j=0;j<i;j++)
      cout<<str[j]<<endl;
    }
int strSort(char*p[],int n)
{
    char*temp;
    int i,j;
    
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            // 排序指针来达到排序字符串的目的 
            if(strcmp(*(p+j),*(p+1+j))>0)
            {
                temp=*(p+j);
                *(p+j)=*(p+1+j);
                *(p+1+j)=temp;
                
                
            }
        }
    }
}

img


int i=0,j;
    char str[i];

你这么定义,str数组只有0个元素了啊。

 
#include<iostream>
#include<string.h>
using namespace std;
int strSort(char**p,int n);
int main()
{
    int i=0,j;
    cout<<"请输入你想输入的字符串的个数"<<endl;
    cin>>i;
    char str[i][100];
    cout<<"请输入你想输入的字符串"<<endl;
    for(j=0;j<i;j++){
          cin>>str[j];
    }
    char*p1=&str[0]; 
    strSort(&p1,i);
    cout<<"排序后的结果为"<<endl;
    for(j=0;j<i;j++)
      cout<<str[j]<<endl;
    }
int strSort(char**p,int n)
{
    char*temp;
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(strcmp(*(p+j),*(p+1+j))>0)
            {
                temp=*(p+j);
                *(p+j)=*(p+1+j);
                *(p+1+j)=temp;
                
                
            }
        }
    }
}
想用传递指针数组的方法来实现字符串的排序,但是在输入的时候输入一个字符串就终止程序了也没有后续操作的执行是为什么

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/744176
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:彻底解决背景跟随弹窗滚动问题
  • 除此之外, 这篇博客: 归并排序详解中的 什么是归并排序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。

    归并排序的实现由两种方法:
    自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);
    自下而上的迭代;

  • 您还可以看一下 王西猛老师的商超收银软件排队挂单取单编程思路教程课程中的 点餐软件开发过程中的挂单取单编程概述小节, 巩固相关知识点