std::string::find 返回错误的答案
std::string::find returns wrong answer
有一些关于std::string::find的帖子(就像这里的这个和这个一样),但我的情况有些不同:
#include <string>
#include <stdio.h>
int main(int argc, char **argv)
{
std::string haystack = "ab\x10c200\x00\x00\x00\x00";
std::string needle = "\x00";
printf("first index is %dn",(int) haystack.find(needle));
return 0;
}
根据这些值,我想知道为什么返回 8:
我猜"\200"算作 1 个字符(? 我可以让find
"\x10"
也视为 1 个字符吗?
一切正常
+---+---+---+---+---+---+---+------+---+---+---+---+
| a | b | | x | 1 | 0 | c | 200 | | x | 0 | 0 |
+---+---+---+---+---+---+---+------+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | | |
+---+---+---+---+---+---+---+------+---+---+---+---+
\
变成了一个字符.看来你想用一个
xNN
.
即使您将\
替换为文字字符串中的,它也不起作用,因为第一个
x00
将被视为终止零,并且在它被忽略之后将被视为终止其他字符。我想字符串的初始化应该如下所示:
std::string haystack = {'a', 'b', 'x10', 'c', '200', 'x00', 'x00', 'x00', 'x00'};
std::string needle = {'x00'};
程序将输出 5。
200
是1 个字符。请参阅转义序列列表。我在这里包括了相关的:
Escape sequence Description Representation
\ backslash byte 0x5c in ASCII encoding
nnn arbitrary octal value byte nnn
xnn arbitrary hexadecimal value byte nn
200
是值为 128 的单个字符(八进制中的 200 是十进制中的 128)。
\x10
是 4 个字符:\
(反斜杠)、x
、1
和0
。如果您希望将其作为单个字符,请不要转义反斜杠 -x10
是值为 16 的单个字符(十六进制中的 10 是十进制中的 16)。
200
是零宽度非连接器之一。这是一个以 UTF-8 编码的 unicode 字符。
例如-
0x2e, 0x80, 0x8c (or in base 8, 342, 200, 214)
以下是字符串的索引方式:
0 A
1 b
2 \3 x 4 1
5 0 6 c
7
8 \9 x 10 0 11 0 12 \13 x 14 0 15 0 16 \17 x 18 0 19 0 20 \
21 x
22 0 23 0
请参阅7th
索引。这将消除您的疑虑。
如果要将\x10
读取为单个字符,请使用x10
将其视为十六进制数。
相关文章:
- 使用 bfs 解决连接组件问题时得到错误的答案
- 递归求和任务的错误答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 乘法宏给出错误的答案
- 谷歌启动B轮巴士路线问题错误的答案?
- 欧拉项目 #8 C++ 得到错误的答案
- 寻找最小楼梯成本的动态规划问题的错误答案
- 为什么可变大小的数组会导致Codechef出现错误答案
- 位集上的按位或给出错误的答案
- 在 c++ 中将模板与类一起使用时,类成员函数的答案错误?
- SPOJ PLD的答案错误
- UVA 3n+1(概率 100)答案错误,但所有测试用例均已通过
- 散列!!答案错误,想不通
- 指数的最后一位——答案错误
- 在计算cpp中数字的n次方根时,答案错误
- Euler项目27的答案错误