C++上机的题目疑问

#include<iostream>usingnamespacestd;classString{private:intsize;//缓冲区大小char*buf;//缓冲区... #include <iostream>
using namespace std;
class String {
private:
int size; // 缓冲区大小
char *buf; // 缓冲区
public:
String(int bufsize);
void Strcpy(char *s); // 将字符串s复制到buf中
void Print() const;
~String() { if (buf != NULL) delete buf; }
};
String::String(int bufsize)
{
size = bufsize;
buf = new char[size];
*buf = '\0';
}
void String::Strcpy(char *s)
{
char *p,*q;
int len = strlen(s);
if (len+1 > size) {
size = len+1;
p = q = new char[size];
//**********found**********
while(______*(q++)=*(s++)_____________); // TODO: 添加代码将字符串s拷贝到字符指针q中
delete [] buf;
buf = p;
}
else {
//**********found**********
for(p=buf;_____ *p=*s ____________;p++,s++); // TODO: 添加代码将字符串s拷贝到buf中
}
}
void String::Print() const
{
cout << size << '\t' << buf << endl;
}
int main()
{
char s[100];
String str(32);
cin.getline(s, 99);
str.Strcpy(s);
str.Print();
return 0;
}
里面的两条横线为什么是这样填??
while(______*(q++)=*(s++)_____________); 这条语句可以拷贝到字符串吗??
for(p=buf;_____ *p=*s ____________;p++,s++);还有这条 p=buf的含义是什么??为什么这样填 搞不懂 求高人解释一下 感激不尽!!
展开
 我来答
kenlee_gz
2012-09-11 · TA获得超过494个赞
知道小有建树答主
回答量:457
采纳率:33%
帮助的人:352万
展开全部
while(*(q++)=*(s++)); //可以拷贝到字符串

for(p=buf;*p=*s;p++,s++); // p=buf就是设置p的初值,指向String的缓冲,当拷贝(*p=*s)完一个字节后,p和s指向下一个指针(p++和s++). 什么时候拷贝结束:*p=*s返回0的时候就结束,也就是拷贝完s后(因字符串以0结束), 其实在判断语句中*p=*s 等同于 *p=*s,*p != 0,也就是它兼具赋值和判断功能。
更多追问追答
追问
这两个循环结构里面的判断语句为什么可以完成赋值呢??
追答
你说错了,它首先是赋值语句,赋值完成后才进行判断。因为赋值语句本身也有返回,返回的数据就是赋值后的结果。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式