减去不同字符串的.size()函数值
Subtracting .size() function values of different strings
最近我遇到了一个问题,而我试图在c++中减去两个字符串的.size()
值。据我所知,size()
返回字符串中的字符数。假设我有两个字符串p
和q
, abs(p.size()-q.size())
应该返回两个字符串长度的差值。但是当我运行这段代码时,它返回了一个突然变大的值。当我分别输出它们的长度,或者如果我将它们的长度值存储在不同的整数中,然后相减,它们会给我正确的答案。我还不知道为什么。
size()
返回一个无符号值。然后,一个较小的无符号值减去一个较大的无符号值将在计算中向下流动,从而得到一个较大的负值。想象一下,如果你在汽车上有一个"滚动"的英里或公里计数器,当你滚过0时,它就变成了99999,这是一个很大的数字。
解决方案,假设您关心负差异是执行static_cast<int>(p.size() - q.size())
(并将其传递给abs
)。
size()的返回值是size_t (无符号整型)的个数因此,如果你用较小的数减去较大的数,你就会遇到问题,并且作为减法的结果得到较大的值。
参考std:: string::大小
std::string
成员函数size()
返回一个无符号值,所以如果p.size() < q.size()
,表达式p.size()-q.size()
不会求值为负数(它是无符号的,不能是负的),而是一个(通常)非常非常大的(无符号)数。
std::string
s报告它们的大小为unsigned
的某个宽度整数;这种类型有点像手表上的秒针:你可以把它从0向前上发条到59,但如果你继续顺时针上发条,它会在再次增加之前下降到0,而如果你逆时针上发条,你会倒数到0,然后跳到59,从那里开始倒数,AD无限。
假设你从一根长度为4的弦中减去一根长度为6的弦,这就像说"分针从4开始,逆时针旋转6分钟"——当你上了4分钟的发条,秒针已经在0了,你再上一分钟到59,最后一分钟带你到58。对于std::string::size_type
,最大值不是59,它要大得多,但问题是一样的。结果总是积极的,所以不受abs
的影响,但无论如何-不是你想要的!
实际最大值可以在#include <limits>
之后用std::numeric_limits<std::string::size_type>::max()
访问,不管值多少。
std::max(p.size(),q.size())-std::min(p.size(),q.size())
,你可以把它想象成"从较大的值中减去较小的值"。另一个选项是…
p.size() > q.size() ? p.size() - q.size() : q.size() - p.size()
…这意味着"如果p较大,则从它减去q,否则从q减去它(即p) "
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- 为什么我不能将 size() 函数编写为 while 循环中的条件?
- 如何从类成员函数返回指针,例如 size_t * class :: function(); 并使用类析构函数 ~size
- std::具有initializer_list和size的unordered_map构造函数在main中编译,但不在类定
- 为什么向量不支持 size 作为成员变量,就像 Java 类中的长度变量一样,而是函数 size()?
- std ::向量距离函数如何给出比.size()更高的值
- 为什么 c++ STL 在 size() 函数中使用无符号
- 如何在没有参数的情况下实现返回双向链表大小的函数?int size() const.
- 调用'maps::size(char [20], char&)'没有匹配函数,但我认为我的方法有
- 如何使用函数:glRenderMode(GLenum mode),glSelectBuffer(GLsizei size
- C++,无法使用 .size() 函数获取有效的矢量大小
- vector.size() 函数计算量大吗?
- 检测 C++ 14 中的 constexpr size() 成员函数
- 瓦尔格林德给出"Invalid write of size 8"空析构函数
- 为什么 vector.size() 函数给我一个错误
- 如何在实现vector时使用C++"size()"作为函数的参数
- 所有容器都有 .size() 函数吗?
- 是否有一些像 std::size() 这样的函数
- C++是否有一个自由函数“size(object)”