#include
int main()
{
char *p,s[20];
int m,n,i;
printf("请输入字符串:");
gets(s);
printf("请问从第几个字符开始删除,要删除几个字符:");
scanf("%d,%d",&n,&m);
for(i=0,p=s+n-1;*p;i++)
*p++=s[n+m-1+i];
printf("得新的字符串:");
puts(s);
return 0;
}
#include
int main(void)
{
char *p, s[20];
int m, n;
printf("请输入字符串:");
gets(s);
printf("请问从第几个字符开始删除,要删除几个字符:");
scanf("%d,%d", &n, &m);
p = s + n - 1 + m;
do {
*(p - m) = *p;
} while (*p++);
printf("得新的字符串:");
puts(s);
return 0;
}
请输入字符串:123456
请问从第几个字符开始删除,要删除几个字符:2,3
得新的字符串:156
110.246.174.*
IP
发表于 2010-02-28 12:51:572
初学者要注意,*p+n和*(p+n)是不同的,前者是先取值再加n,后者是先移动指针再取值。指针p进行p±n运算后,其结果得到一个新的地址,即指向了新的存储单元,而p本身的地址值并未发生变化,即它仍指向原来的存储单元(如上例中pb、py分别指向变量b和y)。当对指针进行
p++p--++p--p
运算后,指针p本身的值会发生变化,即p不再指向原先的对象,而会指向新的对象。
/*
* 改动最少
*/
#include
#include
main()
{
char *p, s[20];
int m, n, i;
printf("请输入字符串:");
gets(s);
printf("请问从第几个字符开始删除,要删除几个字符:");
scanf("%d,%d", &n, &m);
for (i = n - 1; i < strlen(s); i++) //最大值用strlen(s)
s[i] = s[i+m]; //错位赋值
printf("得新的字符串:");
puts(s);
return 0;
}
运行截图:
对字串s没有做操作啊
p=s;
for(i=0,j=0;s[i];i++)
if(i
*(p+j)=0;
puts(p);
根据函数执行的效果,显然你的理解是错的
*b++=0;
相当于*b=0;b=b+1;
这里的++是要等b参与的运算结束之后再加1
注意
++b
和
b++
的区别