//写了个跳过多个空格 为 一个的 函数
void thkg(char *t ,char *p)
{
while(*p != '\0')
{
if(*p !=' ' || *(p+1) != ' ') //为什么 这里的 *(p+1) 不能用 *(++p) 或 *(p++) 呢? 编译环境 gcc 4.7.1
{
*t++ = *p;
}
p++;
}
*t='\0';
}[/size]
8 个解决方案
#1
++p和p++都会改变p的值,所以不用。
#2
用p++的话, if(*p !=' ' || *(p++) != ' ') ||前后两个部分的是值判断是一样的,没有意义。
++p可以用,只不过要对应修改,而且应该会比你现在这样效率更高
++p可以用,只不过要对应修改,而且应该会比你现在这样效率更高
#3
++p可以,p++不可以,两者都会改变p的值,但是之后的 *t++ = *p;会用到p的值。需要看程序需要不需要p的值改变
#4
你要写成如下这样也是可以滴
void thkg(char *t ,char *p)
{
while(*p != '\0')
{
if(*p !=' ' || *(p+1) != ' ')
{
*t++ = *p++;
}
else
p++;
}
*t='\0';
}
#5
1楼的回答是正确的
#6
修改如下:
#include <stdio.h>
char *eatspace(char *d, char *s)
{
char *p = d;
if(NULL == d || NULL == s) return d;
while(*s)
{
if(*s != ' ') *d++ = *s;
s++;
}
*d = '\0';
return p;
}
char *leaveOneSpace(char *d, char *s)
{
char *p = d;
if(NULL == d || NULL == s) return d;
*d++ = *s++;
while(*s)
{
if(' ' == *(d - 1) && ' ' == *s)
;
else
*d++ = *s;
s++;
}
*d = '\0';
return p;
}
int main(void)
{
char s[] = "abc def";
char d[20];
//printf("eatspace...\n");
//eatspace(d, s);
//printf("s=%s\nd=%s\n", s, d);
printf("leaveOneSpace...\n");
leaveOneSpace(d, s);
printf("s=%s\nd=%s\n", s, d);
return 0;
}
#7
++p和p++都会改变p的值,所以不用。
++p和p++都会改变p的值,所以不用。
++p和p++都会改变p的值,所以不用。
不好意思 手机屏幕太小点错了。 这里的 p++ 先执行附近的运算再自增 这个好理解 但++p 是先自增 在这条语句中 它们与 p+1 有什么区别
#8
如下三句:
if(*p !=' ' || *(p+1) != ' ') //为什么 这里的 *(p+1) 不能用 *(++p) 或 *(p++) 呢? 编译环境 gcc 4.7.1
{
*t++ = *p;
}
p++;
在if判断语句这一行,可以使用++p来替换,但p的值被改变了(p=p+1),需要将下面的两句赋值修改为之前p的值;或者将最后一句去掉(因为p已完成自增), *t++ = *p修改为 *t++ = *(p-1);
#1
++p和p++都会改变p的值,所以不用。
#2
用p++的话, if(*p !=' ' || *(p++) != ' ') ||前后两个部分的是值判断是一样的,没有意义。
++p可以用,只不过要对应修改,而且应该会比你现在这样效率更高
++p可以用,只不过要对应修改,而且应该会比你现在这样效率更高
#3
++p可以,p++不可以,两者都会改变p的值,但是之后的 *t++ = *p;会用到p的值。需要看程序需要不需要p的值改变
#4
你要写成如下这样也是可以滴
void thkg(char *t ,char *p)
{
while(*p != '\0')
{
if(*p !=' ' || *(p+1) != ' ')
{
*t++ = *p++;
}
else
p++;
}
*t='\0';
}
#5
1楼的回答是正确的
#6
修改如下:
#include <stdio.h>
char *eatspace(char *d, char *s)
{
char *p = d;
if(NULL == d || NULL == s) return d;
while(*s)
{
if(*s != ' ') *d++ = *s;
s++;
}
*d = '\0';
return p;
}
char *leaveOneSpace(char *d, char *s)
{
char *p = d;
if(NULL == d || NULL == s) return d;
*d++ = *s++;
while(*s)
{
if(' ' == *(d - 1) && ' ' == *s)
;
else
*d++ = *s;
s++;
}
*d = '\0';
return p;
}
int main(void)
{
char s[] = "abc def";
char d[20];
//printf("eatspace...\n");
//eatspace(d, s);
//printf("s=%s\nd=%s\n", s, d);
printf("leaveOneSpace...\n");
leaveOneSpace(d, s);
printf("s=%s\nd=%s\n", s, d);
return 0;
}
#7
++p和p++都会改变p的值,所以不用。
++p和p++都会改变p的值,所以不用。
++p和p++都会改变p的值,所以不用。
++p和p++都会改变p的值,所以不用。
不好意思 手机屏幕太小点错了。 这里的 p++ 先执行附近的运算再自增 这个好理解 但++p 是先自增 在这条语句中 它们与 p+1 有什么区别
#8
++p和p++都会改变p的值,所以不用。
不好意思 手机屏幕太小点错了。 这里的 p++ 先执行附近的运算再自增 这个好理解 但++p 是先自增 在这条语句中 它们与 p+1 有什么区别
如下三句:
if(*p !=' ' || *(p+1) != ' ') //为什么 这里的 *(p+1) 不能用 *(++p) 或 *(p++) 呢? 编译环境 gcc 4.7.1
{
*t++ = *p;
}
p++;
在if判断语句这一行,可以使用++p来替换,但p的值被改变了(p=p+1),需要将下面的两句赋值修改为之前p的值;或者将最后一句去掉(因为p已完成自增), *t++ = *p修改为 *t++ = *(p-1);