编辑:这个谜题也被称为"爱因斯坦的谜语"
该谁拥有斑马(你可以试试这里的网络版)是一款经典的一套谜题的一个例子,我敢打赌,大多数人对堆栈溢出可以用纸笔解决它.但程序化解决方案会是什么样子?
基于下面列出的线索......
谁拥有斑马?
我在Eclipse 3.4.1(CDT 5.0.1)中编写了这个小小的C++示例:
#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
int foo()
{
std::vector<int> numbers;
BOOST_FOREACH(int n, numbers)
{
std::cout << n << std::endl;
}
std::cout << numbers.size << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
然后我按Shift + Ctrl + F格式化我的代码,它变为:
#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
int foo()
{
std::vector<int> numbers;
BOOST_FOREACH(int n, numbers)
{ std::cout << n << std::endl;
}
std::cout << numbers.size << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这与BSD/Allman代码风格有关.其他样式显然改变了格式化代码的外观,但没有一个给出正确的缩进.
当我在更大的代码片段上使用格式化功能时,后续的函数或方法也会受到太少缩进的影响,这使得格式化帮助非常无益.
我有什么办法可以使缩进与BOOST_FOREACH一起正常工作吗?
是否有Windows API函数允许读取当前密码策略是什么?例如,最小长度,复杂性等.
如果没有阅读,有没有办法以编程方式验证策略的密码?
我习惯在我的C++应用程序中传递这样的字符串:
void foo(const std::string& input)
{
std::cout << input.size() << std::endl;
}
void bar()
{
foo("stackoverflow");
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个我希望字符串为NULL的情况:
void baz()
{
foo("stackoverflow");
foo(NULL); // very bad with foo implementation above
}
Run Code Online (Sandbox Code Playgroud)
我可以foo改为:
void foo(const std::string* input)
{
// TODO: support NULL input
std::cout << input->size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是为了传递一个字符串文字或复制一个char*实现,foo我需要写这样的东西:
void bar()
{
string input("hi"); // annoying temporary
foo(&input);
foo(NULL); // will work as long as foo handles NULL properly
}
Run Code Online (Sandbox Code Playgroud)
我开始考虑继承std::string和添加null …
我正在寻找一种干净的C++方法来解析包含$ {}中包含的表达式的字符串,并从编程计算表达式构建结果字符串.
示例:如果我实现程序让"user"评估为"foo"等,"来自$ {host}的Hi $ {user}"将被评估为"Hi foo from bar".
我正在考虑的当前方法包括一个状态机,它一次从字符串中吃掉一个字符,并在达到'}'后评估表达式.任何提示或其他建议?
注意:boost ::非常欢迎!:-)
更新感谢前三个建议!不幸的是我让这个例子太简单了!我需要能够检查$ {}内的内容,所以这不是一个简单的搜索和替换.也许它会说$ {uppercase:foo}然后我必须使用"foo"作为hashmap中的一个键,然后将其转换为大写,但我在编写上面的原始问题时试图避免$ {}的内部细节...... :-)
我读了一本书,int f (int P[2][4])不能接受A[2][3],但B[3][4]很好.这是什么原因?特别是当我们使用指针创建动态分配时,这应该不是问题.谢谢
c++ ×4
boost ×2
string ×2
eclipse ×1
expression ×1
formatting ×1
indentation ×1
logic ×1
null ×1
parsing ×1
security ×1
winapi ×1
windows ×1
zebra-puzzle ×1