所以这是在采访中向我提出的问题 -
for( blah blah ) {
cout<<"World";
}
我的任务是替换blah blah
,以便打印输出为:- Hello World !
我只被允许改变这个等等的短语,仅此而已。没有代码更改低于或高于该值!
答案 0 :(得分:14)
如果可以为blah blah
添加任何内容,为什么甚至会担心for循环的主体:
for(int i = 0 ; std::cout << "Hello world!", i < 0; ) {
std::cout<<"World";
}
答案 1 :(得分:7)
他们没有说你需要实际运行循环,是吗?
#include <iostream>
#include <ios>
using namespace std;
int main() {
for (int i = (cout << "Hello World!",0); i; ) { cout << "World"; }
}
答案 2 :(得分:6)
尝试将循环控制到单个迭代时花了一些时间:
#include <iostream>
#include <ios>
using namespace std;
int main() {
for (cout << "Hello "; cout; cout.setstate(ios::badbit)) { cout << "World"; }
}
如果!
意图在输出中,则此代码将执行此操作:
#include <iostream>
#include <ios>
using namespace std;
int main() {
for (cout << "Hello "; cout; cout << "!", cout.setstate(ios::badbit)) {
cout << "World";
}
}
答案 3 :(得分:4)
有两个问题需要解决。
在for声明的第一部分中,您几乎可以执行每个命令。所以在这里打印所需的输出是个好主意。
要禁止迭代,只需输入false
作为条件。标题的最后一部分可以留空。
#include <iostream>
using namespace std;
int main()
{
for ( cout<<"Hello World!"<<endl ; false ; )
{
cout<<"World"<<endl;
}
return 0;
}
答案 4 :(得分:2)
blah blah
:
const char *p = "Hello "; *p; cout << *p, p++); if (1
答案 5 :(得分:2)
显然,for循环只不过是一种转移。看看它是这样的:
for(
/* Your Code Here */
) { cout << "World"; }
所以,你需要做的第一件事是摆脱程序中已经存在的所有讨厌的代码:
for(
/* Your Code Begins */
;0;);
/* TODO */
if(0
/* Your Code Ends */
) { cout << "World"; }
因为他们自然会想要测试你的聪明才智,让我们做一些非常聪明的事情:
for(
/* Your Code Begins */
;0;);
struct cout {
void operator<<(cout world)
{
hello <world> !"";
}
char const* out;
cout() : out(0) { }
cout(char const* out) : out(out) { }
operator bool() { return !out; }
struct typeof
{
typeof(decltype(::std::cout) const&) { }
void operator>(bool a)
{
::std::cout << (!a ? "!" : "?");
}
};
struct
{
typeof operator<(cout c)
{
return typeof(::std::cout << "Hello " << c.out);
}
} hello;
} cout;
if(cout
/* Your Code Ends */
) { cout << "World"; }
注意:由于他们喜欢名称cout
,因此请务必在代码中使用它!
另外,请注意一个常见的GCC错误(好吧,他们称之为“extension”),这可能会导致您的绝对符合标准的c ++代码出现问题。
最后,回想一下,最初的说明并没有在最后要求换行,所以不要指望任何新行。如果希望立即看到输出,您可能必须flush输出。
您必须跳过的一些箍似乎没必要,但是在命名空间级别使用嵌套类而不是一个嵌套类的严格要求会导致正确的运算符重载出现一些问题。
就个人而言,我想指出这段代码很容易理解:它只是说hello <world>!
,所以让我们快速重新格式化一下结果,导致你的最终代码(这次,周围的结构被省略):
;0;);struct cout{void operator<<(cout world){
hello <world>!
"";}char const*out;cout():out(0){}cout(char const*out):out(out){}
operator bool(){return!out;}struct
typeof{typeof(decltype(::std::cout)const&){}void
operator>(bool a){::std::cout<<(!a?"!":"?");}};
struct{typeof operator<(cout c){return
typeof(::std::cout<<"Hello "<<c.out);}}hello;}cout;if(cout
当然,最后一步只是出于纯粹的审美原因,如果需要可以省略。
P.S。:它实际上打印了“Hello World!”,而不是“: - Hello World!”,我认为这是问题所说的确切内容。将其更改为符合其他格式是留给读者的练习。
答案 6 :(得分:0)
使用C ++无法识别空格的事实!
for(int i = 0; i < 0; ++i); if(true){ cout << "Hello World!"; } else { //blah blah ) {
cout<<"World";
}
答案 7 :(得分:0)
没有人打算修复明显破坏的代码,这些代码访问了一些神秘的未定义的cout
,这显然是非常糟糕的代码,所以......这就是修复:
#include <iostream>
#define BLAH \
struct { \
template <typename T> \
void operator<<(T const& t) const { \
::std::cout << ":- Hello " << t << " !\n"; \
} \
bool okay;\
} cout{true}; \
cout.okay; \
cout.okay = false
int main() {
for(BLAH) {
cout<<"World";
}
}
为了更好的可读性,我可以将您更改为名为#define
的单独BLAH
。
注意:我的gcc拒绝构建这个,但是clang接受了最高警告级别。我正在构建hw.cpp
,如下所示:
make CXXFLAGS=-Wall\ -Wextra\ -pedantic\ -std=c++11 CXX=clang++ hw