扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
好好看看字符串指针。 p在for中赋值。 *s=*(p-s1 s2)字符串指针的加减,表示字符地址的加减。p-s1表示p指向字符与s1的距离(),再加上s2,表示s2中相应字符的地址,再付给s 手机打的,不太清楚。 多看看,字符串指针,就好懂多了
创新互联公司专业提供成都主机托管四川主机托管成都服务器托管四川服务器托管,支持按月付款!我们的承诺:贵族品质、平民价格,机房位于中国电信/网通/移动机房,服务器托管服务有保障!
/*功能:将str字符串中的oldstr字符串替换为newstr字符串
*参数:str:操作目标oldstr:被替换者newstr:替换者
*返回值:返回替换之后的字符串
*版本:V0.2
*/
char*strrpc(char*str,char*oldstr,char*newstr){
char bstr[strlen(str)];//转换缓冲区
memset(bstr,0,sizeof(bstr));
for(int i=0;ilt;strlen(str);i++){
if(!strncmp(str+i,oldstr,strlen(oldstr))){//查找目标字符串
strcat(bstr,newstr);
i+=strlen(oldstr)-1;
}else{
strncat(bstr,str+i,1);//保存一字节进缓冲区
}
}
strcpy(str,bstr);
return str;
}
扩展资料:
c_str函数的返回值是constchar*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化,下面就是这一转化过程。
c++语言提供了两种字符串实现,其中较原始的一种只是字符串的c语言实现。与C语言的其他部分一样,它在c++的所有实现中可用,我们将这种实现提供的字符串对象,归为c-串,每个c-串char*类型的。
标准头文件lt;cstringgt;包含操作c-串的函数库。这些库函数表达了我们希望使用的几乎每种字符串操作。
当调用库函数,客户程序提供的是string类型参数,而库函数内部实现用的是c-串,因此需要将string对象,转化为char*对象,而c_str()提供了这样一种方法,它返回const char*类型(可读不可改)的指向字符数组的指针。例:
#includelt;iostreamgt;
//#includelt;cstringgt;
#includelt;stringgt;//使用头文件string,否则最后coutlt;lt;无法输出add_to
using namespace std;
int main()
{
string add_to="hello!";
const string add_on="baby";
const char*cfirst=add_to.c_str();
const char*csecond=add_on.c_str();
char*copy=new char[strlen(cfirst)+strlen(csecond)+1];
strcpy(copy,cfirst);
strcat(copy,csecond);
add_to=copy;
coutlt;lt;"copy:"lt;lt;copylt;lt;endl;
delete[]copy;
coutlt;lt;"add_to:"lt;lt;add_tolt;lt;endl;
return 0;
}
例(1)
函数声明:const char*c_str();
c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数等来操作方法c_str()返回的指针
比如:最好不要这样:
char*c;
string s="1234";
c=s.c_str();
//c最后指向的内容是垃圾,因为s对象被析构,其内容被处理(纠正:s对象的析构是在s的生命周期结束时,例如函数的返回)
参考资料:
百度百科——c_str
题目有歧义,是单科成绩最大 还是总分最大
我是按照单科成绩最大做的,你参考吧。
#includestdio.h
int *findMax(int *p);
int main()
{
int stu[3][4]={67,76,80,78,90,86,70,56,34,50,75,80},i=0;
int *p=(stu[0][0]),*rep;
printf("Sample Input\n\n");
rep=findMax(p);
printf("\n");
printf("Sample Output\n\n");
while(i++4)
printf("%d ",*rep++);
return 0;
}
int *findMax(int *p)//找出单科成绩分数最大
{
int i=3*4,j=0,max=0,*pSave=p,*rep=NULL,*p1=(p[0]),*p2=(p[4]),*p3=(p[8]);
while(i--0)
{
if(max*p)
max=*p;
printf("%d ",*p++);
if(j++==3)
{
printf("\n");
j=0;
}
}
i=3*4;
while(i--0)
{
if(max==*pSave)
{
if(pSave=p1 pSavep2)
rep=p1;
else if(pSave=p2 pSavep3)
rep=p2;
else if(pSave=p3)
rep=p3;
return rep;
}
pSave++;
}
return NULL;
}
首先,你要知道数组名也是指针。
对于同一个数组来说,在他上面进行指针“减”运算得到的是元素之间的距离
所以p-s1得到的是当前字符相对于数组s1首字符的位置
p-s1+s2得到的是与当前s1指定位置相应的s2中的字符
*p*p!=*s
:两个判断条件*p---没有到数组的结尾
*p
!=
*s
s中字符不在s1中
还有问题可以私下聊,指针很麻烦,谭浩强的书讲的还可以,可以参考
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流