我知道如何用其他语言来做这件事,而不是C++,我不得不在这里使用它.
我有一组字符串,我打印到列表中,并且每个字符串之间需要逗号,但不是逗号.例如,在java中,我会使用stringbuilder,并在构建字符串后删除逗号.我如何用C++做到这一点?
auto iter = keywords.begin();
for (iter; iter != keywords.end( ); iter++ )
{
out << *iter << ", ";
}
out << endl;
Run Code Online (Sandbox Code Playgroud)
我最初尝试插入此块来执行此操作(在此处移动逗号打印)
if (iter++ != keywords.end())
out << ", ";
iter--;
Run Code Online (Sandbox Code Playgroud)
我讨厌小东西把我绊倒的时候.
编辑:谢谢大家.这就是我在这里发布这样的东西的原因.这么多好的答案,并以不同的方式解决.经过一个学期的Java和汇编(不同的类),不得不在4天内完成一个C++项目,这让我陷入了困境.我不仅得到了答案,还有机会思考解决这类问题的不同方法.真棒.
当我在大学(80年代中期)学习CS时,不断重复的一个想法是总是写出在顶部(而不是......)而不是在底部(做...同时)测试的循环.环.这些概念通常以对研究的参考作为后盾,这些研究表明,在顶部测试的循环在统计上比其底部测试对应物更可能是正确的.
结果,我几乎总是编写在顶部测试的循环.如果它在代码中引入了额外的复杂性,我不会这样做,但这种情况似乎很少见.我注意到一些程序员几乎专门编写在底部测试的循环.当我看到像这样的结构:
if (condition)
{
do
{
...
} while (same condition);
}
Run Code Online (Sandbox Code Playgroud)
或者反过来(if在里面while),它让我想知道他们是否真的以这种方式编写它,或者if当他们意识到循环没有处理null情况时他们添加了语句.
我做了一些谷歌搜索,但没有找到任何关于这个主题的文献.你们(和女孩们)如何写你的循环?
在C编程语言中,我经常做以下事情:
while ((c = getch()) != EOF) {
/* do something with c */
}
Run Code Online (Sandbox Code Playgroud)
在Python中,我没有发现任何类似的东西,因为我不允许在evaluate表达式中设置变量.我通常最终必须设置两次评估表达式!
c = sys.stdin.read(1)
while not (c == EOF):
# Do something with c
c = sys.stdin.read(1)
Run Code Online (Sandbox Code Playgroud)
在我试图找到更好的方法时,我找到了一种只需要设置和评估表达式一次的方法,但这变得更加丑陋......
while True:
c = sys.stdin.read(1)
if (c == EOF): break
# do stuff with c
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经针对我的一些情况采用了以下方法,但这对于常规while循环来说远非最佳...:
class ConditionalFileObjectReader:
def __init__(self,fobj, filterfunc):
self.filterfunc = filterfunc
self.fobj = fobj
def __iter__(self):
return self
def next(self):
c = self.fobj.read(1)
if self.filterfunc(c): raise StopIteration
return c
for c in ConditionalFileObjectReader(sys.stdin,lambda c: …Run Code Online (Sandbox Code Playgroud) 可能重复:
什么时候适当?
有人会介意告诉我这两个陈述之间的区别是什么,何时应该使用另一个陈述?
var counterOne = -1;
do {
counterOne++;
document.write(counterOne);
} while(counterOne < 10);
Run Code Online (Sandbox Code Playgroud)
和
var counterTwo = -1;
while(counterTwo < 10) {
counterTwo++;
document.write(counterTwo);
}
Run Code Online (Sandbox Code Playgroud)
http://fiddle.jshell.net/Shaz/g6JS4/
在这个时刻,我没有看到do声明的重点,如果它可以在声明中没有指定它的情况下完成while.
这是一个非常主观的问题,所以我会更具体.有没有时间do-while循环比正常的while循环更好的编码风格?
例如
int count = 0;
do {
System.out.println("Welcome to Java");
count++;
} while (count < 10);`
Run Code Online (Sandbox Code Playgroud)
在评估do语句(也就是强制do语句至少运行一次)之后检查while条件似乎没有意义.
对于像我上面的例子那样简单的东西,我会想象:
int count = 0;
while(count < 10) {
System.out.println("Welcome to Java"); count++;
}
Run Code Online (Sandbox Code Playgroud)
通常被认为是以更好的写作风格写成的.
任何人都可以为我提供一个工作示例,说明什么时候将do-while循环视为唯一/最佳选择?你的代码中有do-while循环吗?它起什么作用?你为什么选择do-while循环?
(我有一种深刻的感觉,do-while循环可能在编码游戏中有用.如果我错了,请纠正我,游戏开发者!)
我希望有人能解释一下C++中的while和do之间的区别
我刚开始学习C++并且使用这段代码我似乎得到了相同的输出:
int number =0;
while (number<10)
{
cout << number << endl;
number++
}
Run Code Online (Sandbox Code Playgroud)
而这段代码:
int number=0;
do
{
cout << number << endl;
number++
} while (number<10);
Run Code Online (Sandbox Code Playgroud)
这两个计算中的输出都是相同的.所以似乎没有区别.我试图寻找其他的例子,但他们看起来很难理解,因为它包含了数学上的东西和其他我尚未学到的东西.我的书也对我的问题给出了一种迷幻的答案.
是否有一个更简单的例子来显示这两个循环之间的区别?
我很好奇
在某些情况下,我们可以互换使用while循环或do-while循环.我的一位朋友告诉我,这种情况我们应该使用do-while循环.因为它比同时更快.任何人都可以给我证明吗?
有人可以解释有两种不同类型的while循环的目的吗?我是编程新手.如果可能的话,还提供带有正确while循环的示例情况.
我理解如何使用while循环.这就是我所做的:
bool myBool = true;
int i = 0;
while (myBool) {
if (i > 10) {
myBool = false;
}
i = i + 1;
}
Run Code Online (Sandbox Code Playgroud) do-while ×5
loops ×5
while-loop ×5
c++ ×3
c ×2
java ×1
javascript ×1
pretty-print ×1
python ×1