C++ 获取向量中常量字符* [ ] 的长度

C++ Get length of const char* [ ] in vector

本文关键字:字符 获取 向量 常量 C++      更新时间:2023-10-16

如何获取常量字符* 数组索引的长度?

向量:

std::vector<const char*> _infoBarText;

常量字符* []:

const char* text[4] = {"Current T:", "Target T:", "Time elapsed:", "Time remaining:"};

将 char 数组分配给向量:

_infoBarText.assign(text, text+4);

如何从向量中获取单个字符串的长度,例如"current T"

原始C字符串(裸char*-s(并不完全适合现代C++代码。

如果您将其更改为std::vector<std::string_view>则可以在(实际上(任何开销(鉴于您正在使用文字初始化它(的情况下解决问题,并且作为奖励,您可能会使其更安全,更可用。

有关详细信息,请参阅 cpp 首选项文章。

示例(GodBolt(:

#include <string_view>
#include <vector>
#include <iostream>
int main() {
using namespace std::literals;
std::vector<std::string_view> strs = { "hello"sv, "there"sv };
for (auto&& str: strs)
std::cout << str << str.size();
return 0;
}

GodBolt Code Insight Output(注意std::operator""sv("hello", 5ul)(:

#include <string_view>
#include <vector>
#include <iostream>
int main()
{
using namespace std::literals;
std::vector<std::string_view> strs = std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >{std::initializer_list<std::basic_string_view<char, std::char_traits<char> > >{std::operator""sv("hello", 5ul), std::operator""sv("there", 5ul)}, std::allocator<std::basic_string_view<char, std::char_traits<char> > >()};
{
std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > > & __range = strs;
__gnu_cxx::__normal_iterator<std::basic_string_view<char, std::char_traits<char> > *, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > > > __begin = __range.begin();
__gnu_cxx::__normal_iterator<std::basic_string_view<char, std::char_traits<char> > *, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > > > __end = __range.end();
for( ; __gnu_cxx::operator!=(__begin, __end); __begin.operator++() )
{
std::basic_string_view<char, std::char_traits<char> > & str = __begin.operator*();
std::operator<<(std::cout, std::basic_string_view<char, std::char_traits<char> >(str)).operator<<(str.size());
}
}
return 0;
}

漫长的道路:

#include <vector>
#include <cstring> // for strlen
std::vector<const char*> _infoBarText;
char const *str = _infoBarText[0]; // or any other valid index
auto len = std::strlen(str);

短:

auto len = std::strlen(_infoBarText[0]);