Ava*_*Ava 0 c++ reverse while-loop
using namespace std;
void reverse(char a[],int slen, int elen)
{
int start,end,temp;
for(start=slen,end=elen;start<end;start++,end--)
{
temp=a[start];
a[start]=a[end];
a[end]=temp;
}
}
void reverseall(char b[])
{
char a[15];
int i,j,n=0,len;
for(i=14,j=0;i>=0,j<15;i--,j++)
a[j]=b[i];
i=0;
j=0;
while(a[i]!='\0')
{cout<<"h";
n++;
i++;
}
while(j!=n)
{
if(j!=0)
j++;
len=0;
while(a[j]!= ' ' && a[j]!='\0')
{
len++;
j++;
}
reverse(a,j-len,j-1);
}
for(i=0;i<n;i++)
cout<<a[i];
}
int main()
{
char b[20]="hi how are you";
reverseall(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我修改了一个适当的反转工作程序 ,只添加了3行,而while循环现在不能正常工作.
for(i=14,j=0;i>=0,j<15;i--,j++)
a[j]=b[i];
i=0;
j=0;
Run Code Online (Sandbox Code Playgroud)
这是程序的链接,我希望输出为"你是多么喜欢".
谢谢.
这种情况i>=0,j<15可能并不符合您的想法.首先,i>=0评估(无论是真还是假),然后丢弃结果,然后j<15评估并传递结果.也就是说,i>=0,j<15等同于j<15.你可能想要的是什么i>=0 && j<15.
请注意我如何用二元和运算符替换逗号运算符.通常,表达式a, b意味着首先评估a,然后评估b,后者的结果是整个表达式的结果.除非评估a有副作用(例如修改变量),否则这是无稽之谈.任何理智的编译器都会在这里警告你,如果你提高警告级别,你应该几乎总是这样做.
表达a && b意味着首先评估a.如果是假,结果a && b也是假的.否则,b进行评估,结果是整个表达式的结果.也就是说,表达a && b如果两个仅评估为真a,并b进行评估,以正确的.请注意,b如果a已经为假,则根本不进行评估,因为无论具有什么值b,它都不可能再影响结果.这种行为称为短路评估.