如何对字符串数组的每个字符串进行排序

Posted

技术标签:

【中文标题】如何对字符串数组的每个字符串进行排序【英文标题】:How to sort each character string of character string array 【发布时间】:2016-06-22 13:40:05 【问题描述】:

我想对字符串数组的每个字符串进行排序,这是我尝试过的代码。

#include <iostream>
#include <algorithm>

void _sort_word(char *str)

    int len = strlen(str); 
    std::sort(str,str+len); // program get stuck here. 

int main()

    char *str[] = "hello", "world";
    for(int i=0;i<2;i++)
        _sort_word(str[i]);
        cout << str[i] << "\n";
    

我想知道sort(str,str+len); 在这里是一个有效的声明,如果不是应该怎么做?

【问题讨论】:

问题是std::sort()需要对底层内存进行写访问,目前是一个char字符串文字,你不能在那里改变任何东西。 我可以以某种方式将字符串文字转换为字符数组并将其发送到 _sort_word() 函数吗? 您需要更好的编译器或需要打开警告:coliru.stacked-crooked.com/a/397b8016997e5c95 @saurabhagarwal 如果最大长度为6,请尝试char str[2][6] = "hello", "world"; 另见一些关于开始identifier with an underscore 【参考方案1】:

首先,C++ 中的字符串文字具有常量字符数组的类型。所以正确的数组声明应该是这样的

const char *str[] = "hello", "world";
^^^^^

因此,数组元素指向的字符串字面量是不可变的。

您应该至少声明一个二维数组。

这是一个演示程序

#include <iostream>
#include <algorithm>
#include <cstring>

void sort_word( char *s )

    size_t l = std::strlen( s ); 
    std::sort( s, s + l ); 



int main() 

    char str[][6] =  "hello", "world" ;

    for ( auto &s : str ) sort_word( s );
    for ( auto &s : str ) std::cout << s << std::endl;

    return 0;

它的输出是

ehllo
dlorw

如果你的编译器不支持基于范围的 for 语句,那么你可以改写

for ( size_t i = 0; i < sizeof( str ) / sizeof( *str ); i++ ) sort_word( str[i] );

【讨论】:

以上是关于如何对字符串数组的每个字符串进行排序的主要内容,如果未能解决你的问题,请参考以下文章

使用计数值对数组进行排序

对字符串数组和 int 数组进行排序

按字符串内的数字对数组进行排序[重复]

如何在 Java 中对对象数组进行排序?

按长度排序数组

如何使用基数排序对变长字符串数组进行排序?