提问人:tryst with freedom 提问时间:11/12/2023 最后编辑:Abderrahmene Rayene Mihoubtryst with freedom 更新时间:11/13/2023 访问量:23
打印出一个元素的集合不会显示任何内容
Printing out a set with one element shows nothing
问:
当我试图弄清楚为什么我为leet代码问题编写的解决方案不起作用时,问题就出现了。
#include <algorithm>
#include <iostream>
#include <set>
using namespace std;
int main() {
string s = "au";
std::set < char > mems;
int ans = 0;
for (int i = 0; i <= s.length(); i++) {
for (int j = i; j <= s.length(); j++) {
if (mems.count(s[j]) == 1) {
if (j - i > ans) { ans = j - i; }
i = j - 1;
j = s.length();
mems.clear();
}
else {
mems.insert(s[j]);
}
}
}
if (s.length() == mems.size()) { ans = s.length(); }
for (auto item : mems)
std::cout << item << endl;
cout<<mems.size() << "";
}
以下代码表明 mems 的大小为 1,但与此同时,当我尝试打印出项目时,它什么也没显示。
这怎么可能?
我在网上检查了一组的最小大小,我发现它是 0,所以问题也与此无关。
预期行为应为 。mems.size() == 2
答:
1赞
balazon
11/12/2023
#1
你的 for 循环是从 0,1,2(包括 2 个)迭代的,这可能不是你故意的。将您的 <= check 替换为严格<以避免这种情况。 另一方面,这里发生的情况是,您正在访问位置 2 处大小为 2 的字符串,该字符串根据标准返回一个 null 字符(0 或“\0”)。
当使用字符串文字初始化时,std::strings 是否以“\0”结尾?
所以最后 mems 包含一个 0 字符,当你打印它时,它没有任何作用,就像打印一个空字符串一样。 此处在索引 2 处返回 null 字符串的原因可能与 c 字符串有关,c 字符串始终以 null 结尾,以便于打印它们。 例如:
const char* str = "foo";
printf("%s\n", str);
这打印了“foo”,但 printf 并不真正知道 str 的大小,它只是一个指针,但是当它遇到 0 时,它就停止了。 作为实验,您可以将 str 替换为
const char* str = "f\0oo";
然后只打印字母 F
评论