我想检查wstring是否只包含空格(准确地说:“\ t \ r \ n”)。我找到了几种使用find_last_not_of()
方法的解决方案。
我对这个方法有2个问题:
当我知道在wstring包含非空白字符的情况下,这些字符将位于字符串的开头,如果我使用{{1}则不会更好因为它一发现就会返回?
两种方法都有O(n)的复杂性,或者我错了吗?
我知道网上有很多关于这些方法的信息,但我发现这个主题有些矛盾。
答案 0 :(得分:1)
实现std::basic_string::find_last_not_of
的方式不是规范的一部分;因此,我们不能说这些字符是以自然顺序还是反向顺序查找的。 p>
因此,
让我们来看看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
应该是最佳选择。