我怎样才能找到字符串数组中最长的长度?
我有几种选择可供选择,最长的是“如何玩”,长度为12个字符
在一个简短的总结中,我如何才能找到数组中最长的部分并获得数字?这是我的阵列:
string mainMenuText[] = {" Play game ",
" Highscores ",
" Storyline ",
" How To Play",
" Exit Game "};
答案 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;
将它放在代码文件的顶部。