#include
#include
#include
int main(void)
{
char str[81];
char *p, temp;
int i,n,length;
gets(str);
for (p = str,i=0,n = strlen(str); i<n/2; i++)//将整个字符串倒序
{
temp = *(p+n-1-i);
*(p+n-1-i) = *(p+i);
*(p+i) = temp;
}
puts(str);
p = str;
length=0;
do //将字符串中的每个单词倒序
{
if( isalpha(*p) )
{
length++;
}
else
{
if(length>1)
for(i=0; i<length/2; i++)
{
temp = *(p-1-i);
*(p-1-i) = *(p-length+i);
*(p-length+i) = temp;
}
length = 0;
}
}
while(*p++ != '\0');
puts(str);
return 0;
}
这个do while循环怎么理解?
do //将字符串中的每个单词倒序
{
if( isalpha(*p) ) //*P指向str,也就是同一块地址,这里判断*p所指的字符是否为字母,如果是,则length计数
{
length++;
}
else
{
if(length>1)
for(i=0; i<length/2; i++)//这个for循坏做交换功能,例如:ABC123DEF,变成DEF123ABC,可以自己举一串字符看看
{
temp = *(p-1-i);
*(p-1-i) = *(p-length+i);
*(p-length+i) = temp;
}
length = 0;
}
}
while(*p++ != '\0');
循环语句的三种形式:
1. while ( 循环条件 ) {
循环操作
}
2. do {
循环操作
} while( 循环条件 ); &......
答案就在这里:对while、do while、for循环的理解
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。
就是判断p是否到了了结束符,否则就一直循环,交换位置
像这种问题,可以自己举一个字符串,根据程序的走向,一步一步的执行看看,这叫手动执行程序。
单步调试也可以,反正能跟踪程序的走向,一切就明了了
就是判断一个结束符,即是不是“\0”