C++的指针循环问题,
我想问的是for(p=str;*p;p++)for(q=r=p;*q;q++)if(*r>*p)r=q;if(*r!=*p)c=*p;*p=*r;*r=c;是怎样循环的,...
我想问的是
for(p=str;*p;p++)
for(q=r=p;*q;q++)
if(*r>*p)
r=q;
if(*r!=*p)
c=*p;
*p=*r;
*r=c;
是怎样循环的, 这个程序的功能是 排序吧,由小到大排序。
特别是 *r!=*p
有什么作用啊。。。 展开
for(p=str;*p;p++)
for(q=r=p;*q;q++)
if(*r>*p)
r=q;
if(*r!=*p)
c=*p;
*p=*r;
*r=c;
是怎样循环的, 这个程序的功能是 排序吧,由小到大排序。
特别是 *r!=*p
有什么作用啊。。。 展开
3个回答
展开全部
代码有误,作用是对字符串从小到大排序.
修改后:
#include <stdio.h>
void main()
{
char *p,*q,*r,c,str[7] = "231465";
for(p=str;*p;p++) // 从str的第一个字符开始循环,结束条件为*p(也就是*p!='\0' , '\0'是字符串结束符)
{
for(q=r=p;*q;q++) // 从p开始循环,r指向p,结束条件为*p(也就是*q!='\0' , '\0'是字符串结束符)
{
if(*r>*q) // 如果找到一个比r小的字符 // 这里条件错误,(*r>*p)修改为(*r>*q) ,不然此循环没有意思,因为r和p的指向没有变化。
{
r=q; // r指向这个小字符,第二层循环结束之后,r指向p后面的最小的字符
}
}
if(*r!=*p) // 如果r和p指向的字符不相等,就交换这两个数,
// 使得p指向的字符变成最小的字符,然后继续第一层循环
// 寻找下一个最小的数。
{
c=*p;
*p=*r;
*r=c;
}
}
}
修改后:
#include <stdio.h>
void main()
{
char *p,*q,*r,c,str[7] = "231465";
for(p=str;*p;p++) // 从str的第一个字符开始循环,结束条件为*p(也就是*p!='\0' , '\0'是字符串结束符)
{
for(q=r=p;*q;q++) // 从p开始循环,r指向p,结束条件为*p(也就是*q!='\0' , '\0'是字符串结束符)
{
if(*r>*q) // 如果找到一个比r小的字符 // 这里条件错误,(*r>*p)修改为(*r>*q) ,不然此循环没有意思,因为r和p的指向没有变化。
{
r=q; // r指向这个小字符,第二层循环结束之后,r指向p后面的最小的字符
}
}
if(*r!=*p) // 如果r和p指向的字符不相等,就交换这两个数,
// 使得p指向的字符变成最小的字符,然后继续第一层循环
// 寻找下一个最小的数。
{
c=*p;
*p=*r;
*r=c;
}
}
}
展开全部
这段代码似乎缺了一些大括号,否则解释不通,加上大括号应该是下面这样子
for(p=str;*p;p++) // 从str的第一个字符开始循环
{
for(q=r=p;*q;q++) // 从p开始循环,r指向p
{
if(*r>*p) // 如果找到一个比r小的字符
{
r=q; // r指向这个小字符,第二层循环结束之后,r指向p后面的最小的字符
}
}
if(*r!=*p) // 如果r和p指向的字符不相等,就交换这两个数,
// 使得p指向的字符变成最小的字符,然后继续第一层循环
// 寻找下一个最小的数。
// 这里的判断实际上没有必要,不管r与p是否相等,直接交换就行,
// 如果它们相等,交换和不交换是一样的。
{
c=*p;
*p=*r;
*r=c;
}
}
for(p=str;*p;p++) // 从str的第一个字符开始循环
{
for(q=r=p;*q;q++) // 从p开始循环,r指向p
{
if(*r>*p) // 如果找到一个比r小的字符
{
r=q; // r指向这个小字符,第二层循环结束之后,r指向p后面的最小的字符
}
}
if(*r!=*p) // 如果r和p指向的字符不相等,就交换这两个数,
// 使得p指向的字符变成最小的字符,然后继续第一层循环
// 寻找下一个最小的数。
// 这里的判断实际上没有必要,不管r与p是否相等,直接交换就行,
// 如果它们相等,交换和不交换是一样的。
{
c=*p;
*p=*r;
*r=c;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*r表示r指针指向的数的值,*p表示p指针指向的数的值。
更多追问追答
追问
额额,这个我懂撒 ,我就是不知道这2个FOR语句是怎样循环的, 第二个if语句 的*r!=*p
有什么作用撒?
追答
这是一个选择排序的算法,第一个for,对str中的所有数进行一次遍历,然后在第二个for中,它将当前数与后面的所有数进行比较。如果发现后面有任何数大于当前数的,就把它找出来,存在r中,然后把当前数和找出来的那个最大数换个位置。这样一遍下来就可以保证数组内的数是由大到小排列
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询