gpt4 book ai didi

c++ - 字符串中只有空格 find_first_not_of() vs find_last_not_of()

转载 作者:行者123 更新时间:2023-11-28 05:57:46 25 4
gpt4 key购买 nike

我想检查一个 wstring 是否只包含空格(准确地说:“\t\r\n”)。我找到了几种使用方法 find_last_not_of() 的解决方案。

关于这个方法我有两个问题:

  1. 当我知道在 wstring 将包含非空白字符的情况下,这些字符将位于字符串的开头,如果我使用 find_first_not_of 不是更好吗() 因为它一找到东西就返回?

  2. 这两种方法的复杂度都是 O(n) 还是我错了?

我知道网上有很多关于这些方法的信息,但我发现了一些关于这个主题的矛盾陈述。

最佳答案

std::basic_string::find_last_not_of 的实现方式不是规范的一部分;因此我们不能说这些字符是按自然顺序查找还是以相反顺序查找。

因此,

  1. 依赖于实现
  2. 依赖于实现

让我们看看 libstdc++'s implementation of std::basic_string::find_last_not_of (basic_string.tcc):

1317   template<typename _CharT, typename _Traits, typename _Alloc>
1318 typename basic_string<_CharT, _Traits, _Alloc>::size_type
1319 basic_string<_CharT, _Traits, _Alloc>::
1320 find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
1321 {
1322 __glibcxx_requires_string_len(__s, __n);
1323 size_type __size = this->size();
1324 if (__size)
1325 {
1326 if (--__size > __pos)
1327 __size = __pos;
1328 do
1329 {
1330 if (!traits_type::find(__s, __n, _M_data()[__size]))
1331 return __size;
1332 }
1333 while (__size--);
1334 }
1335 return npos;
1336 }

正如人们可能猜到的那样,字符串是向后查找的。在您的特定情况下,std::basic_string::find_first_not_of 应该是可行的方法。

关于c++ - 字符串中只有空格 find_first_not_of() vs find_last_not_of(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33823457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com