while(*p||*q)
时间: 2024-01-23 16:15:27 浏览: 132
while(*p||*q)是一个循环条件,表示当指针p或者指针q所指向的值不为0时,循环会一直执行。这个条件可以用于循环遍历数组或者字符串,直到遇到结束标志为止。
以下是一个示例代码,演示了while(*p||*q)的用法:
```c++
char* p = "Hello";
char* q = "World";
while(*p || *q) {
if(*p) {
cout << *p;
p++;
}
if(*q) {
cout << *q;
q++;
}
}
// 输出:HWeolrllod
```
这段代码会依次输出指针p和指针q所指向的字符,直到遇到字符串结束标志'\0'为止。
相关问题
void fun(char *a) { // 去掉前导的 * while (*a == '*') { a++; } // 去掉尾部的 * char *end = a + strlen(a) - 1; while (*end == '*' && end > a) { end--; } *(end + 1) = '\0'; // 去掉中间的 * char *p = a; while (*p != '\0') { if (*p == '*') { if (*(p + 1) == '*' || *(p - 1) == '*') { // 保留连续的 * p++; } else { // 删除单个 * char *q = p; while (*q != '\0') { *q = *(q + 1); q++; } } } else { p++; } }}帮我运行这个程序
好的,我可以帮你运行这个程序。下面是我写的测试代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
void fun(char *a) {
// 去掉前导的 *
while (*a == '*') {
a++;
}
// 去掉尾部的 *
char *end = a + strlen(a) - 1;
while (*end == '*' && end > a) {
end--;
}
*(end + 1) = '\0';
// 去掉中间的 *
char *p = a;
while (*p != '\0') {
if (*p == '*') {
if (*(p + 1) == '*' || *(p - 1) == '*') {
// 保留连续的 *
p++;
} else {
// 删除单个 *
char *q = p;
while (*q != '\0') {
*q = *(q + 1);
q++;
}
}
} else {
p++;
}
}
}
int main() {
char a[100];
cout << "请输入带*的字符串(不超过99个字符):" << endl;
cin >> a;
fun(a);
cout << "处理后的字符串为:" << endl;
cout << a << endl;
return 0;
}
```
你可以把上面的代码复制到你的编译器中运行,输入带*的字符串,程序会自动调用函数 fun 处理字符串,并输出处理后的结果。注意,输入的字符串长度不能超过 99 个字符。
以下与库函数strcpy(char *p, char *q)功能不相等的程序段是( )。 A. strcpy1(char *p, char *q) { while ((*p++=*q++)!='\0'); } B. strcpy2( char *p, char *q) { while((*p=*q)!='\0') {p++; q++;} } C. strcpy3(char *p, char *q) { while (*p++=*q++); } D. strcpy4( char *p, char *q) { while(*p) *p++=*q++; }
选项 D 与函数 strcpy(char *p, char *q) 的功能不相等。
原因:
函数 strcpy(char *p, char *q) 的作用是将字符串 q 拷贝到字符串 p 中,包括字符串结束符 '\0'。而选项 D 的程序段只有在字符串 p 的结尾处才会加上 '\0',否则会产生字符串拼接的结果,而不是字符串复制的结果。
例如,当 p 中已经存在字符串 "Hello",q 中有字符串 "world" 时,使用选项 D 的程序段会得到字符串 "Helloworld",而不是预期的字符串 "world"。因此,选项 D 与函数 strcpy(char *p, char *q) 的功能不相等。
阅读全文