答案是5,因为你调用函数是fun("hello"),在c中字符串都是以'\0'结尾的,所以是实际上传入函数的字符串是"hello\0",然后开始执行函数,先是定义char指针t,以s的值赋值,这也就是使得t指向s,*t就是'h',然后执行while循环,知道*t='\0'为止,t++,要*t='\0',t一共加了5次,所以t-s就是5,这个函数的目的就是为了求字符串的长度
成都创新互联公司长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为隆尧企业提供专业的网站设计制作、成都做网站,隆尧网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
c/c++ 有类型提升的概念 也就是说char型实际上是int型 你还记得ASCII码吧 就是把数字映射到码表中找到对应字符 再输出 当你做把char型做运算的时候 会提升为int再做运算
设s的首地址是1000,当t指向'\0'时,其地址为1005(因为char数组的每个元素占一个字节),所以,t-s=(1005-1000)/1就是字符串的长度。两个指针变量相减,就是它们的地址之间相差的元素个数(相差的字节数/每个元素的字节数)。
/*Note:YourchoiceisCIDE*/#include"stdio.h"#include"stdlib.h"#include"ctype.h"intn=0;charrecord[20];floatproduct();floatchange();floatmuli(){floatsumm;summ=product();while(record[n]=='-'||record[n]=='+'){switch(record[n]){case'+':n++;summ+=product();break;case'-':n++;summ-=product();break;}}returnsumm;}floatproduct(){floatsump;sump=change();while(record[n]=='*'||record[n]=='/'){switch(record[n]){case'*':n++;sump*=change();break;case'/':n++;sump/=change();break;}}returnsump;}floatchange(){floatsumc;charrec[20],i=0;if(record[n]=='('){n++;sumc=muli();}if(record[n]==')')n++;while(isdigit(record[n])||record[n]=='.'){while(isdigit(record[n])||record[n]=='.')rec[i++]=record[n++];rec[i]='\0';sumc=atof(rec);}returnsumc;}voidmain(){while(1){n=0;scanf("%s",record);printf("%s=%g\n",record,muli());}}这个是比较简单的。。。但是有点难理解。。。不过运行绝对正确。。还支持括号。。。但是在这个程序里面我加没有出错处理。。。另一种方法是用栈写。。。这个好理解。。但是麻烦。。。
楼主你好~
根据你的需求,代码如下:
#includestdio.h
#includestring.h
int main()
{
char a[50]={0};
char b[50]={0};
char temp[50]={0};
int n,i,j,k=0;
printf("请输入字符串a:");
scanf("%s",a);
printf("请输入字符串b:");
scanf("%s",b);
printf("\n字符串a为:%s\n",a);
n=strlen(a);
for (i=0;b[i]!='\0';i++)
for(j=0;jn;j++)
{
if(a[j]==b[i])
{
a[j]=0;
}
}
for(j=0;jn;j++)
{
if(a[j]!=0)
{
temp[k++]=a[j];
}
}
printf("去除字符后的字符串a为:%s\n",temp);
return 0;
}
根据楼主需求,这个没用指针,是通过字符串数组及其转存来实现的,具体结果可以通过输入字符串a和字符串b来展示。
而且这个是根据你的需求,删除b中“所含有的字符”,而不是“所含有的字符串”,如果我没理解错的话,这应该就是你所需要的了。
如输入a为"hello",b为"ho",则输出显示为"ell"。
希望楼主能看明白,祝楼主学习进步~~