C++程序填空题的问题!急求!!!!!!一定要写出详细过程,本人是菜鸟

来源:百度知道 编辑:UC知道 时间:2024/05/18 08:28:03
#include <iostream.h>
char *f( char *s)
{
for(char *p=s, *q=s; *q=*p;p++)
if(*q>='0' && *q<='9') q++;
return s;
}

void main(void)
{
char s1[]="It's 4 p.m.", s2[]="3米=3000毫米";
cout<<f(s1)<<endl;
cout<<f(s2)<<endl;
}
程序输出的第一行是( ),第二行是( )

提取字符串s中的数字。首先,指针p、q都指向s,使用p对s进行遍历。

循环条件是*q=*p,即是每次循环都把p指向的字符赋给q指向的内存空间(在同一个数组内),然后看赋值后的*q是否为0,不为0继续,否则退出。

当*p是一个数字的时候,由于判断循环条件是已经把它存储到q处,这时q指向下一个元素,就意味这把p指向的字符存到了数组中。*p不是数字的话继续,不做处理。直到p移动到字符串末尾,p='\0'=0时,循环结束。

结果:
4
33000

第一行:“It's 4 p.m.”
第二行:“3米=3000毫米”
你虽然将一个字符串指针传入f()函数进行操作,但没有改变传入指针的地址值,所以其返回的地址值与原地址值相同,所以程序输出如上。