C ++数组中字符串的长度

时间:2015-05-16 16:54:36

标签: c++ arrays

我怎样才能找到字符串数组中最长的长度?
我有几种选择可供选择,最长的是“如何玩”,长度为12个字符 在一个简短的总结中,我如何才能找到数组中最长的部分并获得数字?这是我的阵列:

string mainMenuText[] = {" Play game  ",
                         " Highscores ",
                         " Storyline  ", 
                         " How To Play", 
                         " Exit Game  "};

5 个答案:

答案 0 :(得分:2)

您还可以使用#include <algorithm>中的现代C ++标准库功能:

std::string mainMenuText[] = {" Play game  ", " Highscores ", " Storyline  ", 
                              " How To Play", " Exit Game  "};
auto it = std::max_element(std::begin(mainMenuText), std::end(mainMenuText),
    [](std::string& lhs, std::string& rhs){return lhs.size() < rhs.size();});
auto num = it->size(); // here is your max size
std::cout << "Longest: [" << *it << "] of size: " << num;

答案 1 :(得分:1)

要获得string的长度,请使用size()成员函数。

要找到最大的size(),您只需要遍历所有字符串:

std::string::size_type max_size = 0;
const size_t NUM = sizeof(mainMenuText) / sizeof(*mainMenuText);
for (size_t i = 0; i < NUM; ++i) {
    max_size = std::max(max_size, mainMenuText[i].size());
}
// max_size is now the maximum size

使用C ++ 11,我们可以稍微缩短一点:

std::string::size_type max_size = 0;
for (const std::string& s : mainMenuText) {
    max_size = std::max(max_size, s.size());
}

但请注意,所有字符串的长度都相同。我不确定这是不是故意的。如果你想考虑填充,我会添加这个功能:

size_t trimmed_length(const std::string& s) {
    size_t start = s.find_first_not_of(' ');
    size_t end = s.find_last_not_of(' ');
    return (start == std::string::npos || end == std::string::npos)
            ? 0 : end - start + 1;
}

使用:

size_t max_size = 0;
for (const std::string& s : mainMenuText) {
    max_size = std::max(max_size, trimmed_length(s));
}

答案 2 :(得分:1)

标准算法std::max_element根据您的标准查找给定序列中的第一个最大元素。例如

#include <iostream>
#include <algorithm>
#include <string>
#include <iterator>

int main() 
{
    std::string mainMenuText[] = 
    {
        " Play game  ", 
        " Highscores ", 
        " Storyline  ", 
        " How To Play", 
        " Exit Game  "
    };

    auto *it = std::max_element( std::begin( mainMenuText ), std::end( mainMenuText ),
                                 []( const std::string &s1, const std::string &s2 )
                                 {
                                     return s1.size() < s2.size();
                                 } );

    std::cout << "The longest string is \"" << *it << "\"" << std::endl;
    std::cout << "It has " << it->size() << " characters" << std::endl;

    return 0;
}

程序输出

The longest string is " Play game  "
It has 12 characters

要获取最长字符串的索引,您可以使用标题std::distance中声明的标准函数<iterator>

例如

size_t pos = std::distance( std::begin( mainMenuText ), it );

或者你可以写简单

size_t pos = it - mainMenuText;

答案 3 :(得分:0)

简单代码

int max=0;
for(int i=0;i<5;i++)
    if(mainMenuText[i].size()>mainMenuText[max].size())
        max=i;
return mainMenuText[max];

答案 4 :(得分:0)

您忘记包含字符串库。

#include <string>
using namespace std; 

将它放在代码文件的顶部。