关于字符串排序的问题

在主函数中输入10个不等长的字符串放入二维宇符数组中,编写函数sort()
利用指针数组对其排序,在主函数中输出排好序的字符串

img

#include<iostream>
#include<cstring>
using namespace std;
void sort(char *str[])
{
    //简单选择排序
    for (int i = 0; i < 9; i++)
    {
        int k = i;
        for (int j = i+1; j < 10; j++)
        {
            if (strcmp(str[k], str[j]) > 0)
            {
                k = j;
            }
        }
        if (k != i)
        {//交换的是地址
            char *p = str[k];
            str[k] = str[i];
            str[i] = p;
        }
    }
}
int main()
{
    char str[10][20];
    for(int i=0;i<10;i++){
        gets(str[i]);
    }
    char *p[10];
    for (int i = 0; i < 10; i++)
    {
        p[i] = str[i];//将str的第i行的首地址付给指针数组的第i个变量
    }
    sort(p);
    cout<<"排序后的结果:"<<endl;
    for (int i = 0; i < 10; i++)
    {
        cout<<p[i]<<endl;//此时p[i]为第i个元素的内容
    }
  return 0;
}
#include <stdio.h>
#include <string.h>
void stob(char s[]);                     //定义排序函数
int main()
{
    char str[10];
    gets(str);                           //输入10个字符
    stob(str);                           //调用排序函数
    puts(str);                           //输出排序后的字符
    return 0;
}
//排序函数
void stob(char s[])
{
    int i, j;
    char temp;
    for (i=0; i<10; i++)
        for (j=i+1; j<10; j++)
            if (s[i]>s[j]){
                temp=s[i];
                s[i]=s[j];
                s[j]=temp;
            }
}

如果有用请采纳,谢谢

img

#include <bits/stdc++.h>
using namespace std;
void sort(char a[][40]){
    int i,j,k;
    char temp[30];
    for(i=0;i<10;i++){
        for(j=i;j<10;j++){
            if(strcmp(a[j],a[i])>0){
            strcpy(temp, a[j]);
            strcpy(a[j], a[i]);
            strcpy(a[i], temp);
            }
        }
    }

}
int main() {
    char c[10][40];
    int i;
    for(i=0;i<10;i++){
        cin>>c[i];

    }
    sort(c);
    for(i=0;i<10;i++){
        cout<<c[i]<<endl;
    }
    return 0;
}

结果及代码如下:

img


#include <iostream>
#include <string>
using namespace std;

#define MAXNMB 10  //10个字符串
#define MAXLEN 40  //每个字符串的最大长度

void sort(char *a[])
{
    int i, j;
    char tmp[MAXLEN];
    for (i = 0; i < MAXNMB - 1; i++)
    {
        for (j = 0; j < MAXNMB - 1 - i; j++)
        {
            if (strcmp(a[j], a[j + 1]) > 0) //按照升序排列,如需降序排列,把>改成<即可
            {
                strcpy(tmp, a[j]);
                strcpy(a[j], a[j + 1]);
                strcpy(a[j + 1], tmp);
            }
        }
    }
}


int main()
{
    char *a[MAXNMB];
    int i;

    cout << "请输入"<< MAXNMB <<"个字符串:" << endl;
    for (i = 0; i < MAXNMB; i++)
    {
        a[i] = new char[MAXLEN];
        cin >> a[i];
    }
        
    //排序
    sort(a);
    //输出
    cout << "排序后的字符串:" << endl;
    for (i = 0; i < MAXNMB; i++)
        cout << a[i] << endl;
    return 0;
}

使用指针数组方式,代码如下:

#include<stdio.h>
#include<string.h>
void sort(char s[][100])
{
    int i,j;
    char* p[10] = {s[0],s[1],s[2],s[3] ,s[4],s[5] ,s[6],s[7] ,s[8],s[9]};     //定义一个指针数组
    for(i=0;i<9;i++)
        for(j=0;j<9-i;j++)
            if (strcmp(p[j],p[j+1])>0)
            {
                char s[100];
                strcpy(s, p[j]);
                strcpy(p[j], p[j+1]);
                strcpy(p[j+1], s);
            }
}
int main()
{
    int i;
    char s[10][100];
    for (i = 0; i < 10; i++)
        gets(s[i]);
    sort(s);
    printf("排序后:\n");
    for (i = 0; i < 10; i++)
        puts(s[i]);
    return 0;
}

输入输出:

img