指针难理解,求看一段代码我的本意是想实现这样的功能,将一个字符串中的所有空格提到字符的开始端。如“abc d
指针难理解,求看一段代码
我的本意是想实现这样的功能,将一个字符串中的所有空格提到字符的开始端。如“abc de fg”转换成“ abcdefg”。
下面的有错误,求帮我看一下,应该怎样写!谢谢!!!
C/C++ codechar *swap(char *s){ char *tmp,*top; char m; top=s; tmp=s; while(*top==' '); top++; while(*tmp!=NULL ) { if(*tmp==' ') { m=*top; *top=*tmp; //这里开始有错 *tmp=m; tmp++; top++; }else { tmp++; } } return s;}
[解决办法]你的错误不是指针引起的。
首先 ,while(*top==' ');这多了个分号。
然后,你每次tmp指向空格的时候才交换,这会引起顺序的混乱。
再然后,如果s的第一个字符是空格的话,你的程序会崩溃,因为top会走在tmp前面却没有检查,最后会溢出。
[解决办法] 58 char *chang_blank_pos(char *str)
59 {
60 assert(str != NULL);
61 char *tmp = str;
62 char *start, *end;
63 int var, len, i;
64
65 while (*tmp != 0 && *tmp == ' ') // ignoring front blank
66 {
67 tmp++;
68 }
69 start = tmp; // point first character which is not blank.
70 while (*tmp != 0) // the string ends as '\0'. '\0' == 0
71 {
72 if (isblank(*tmp))
73 {
74 end = tmp;
75 len = end - start;
76 for (i = len - 1; start < end && i >= 0; i--, end--)
77 {
78 var = *(start + i);
79 *(start + i) = *end;
80 *end = var;
81 }
82 puts(start);
83 start++; // start point next character.
84 }
85 else
86 {
87 tmp++;
88 }
89 }
90
91 return str;
92 }
这是我按照你的需求写得一个函数,你可以自己验证一下,作为一个参考吧。
你的函数里除了多了一个";"之外逻辑上还有些问题,比如你并没有对字符结束符做判断,那么就不知道何时字符串解析结束。
我的这个函数,希望你测试一下;如果还有问题,我们可以继续讨论解决;
[解决办法]C/C++ code #include <stdio.h> char *swap(char *s) { char *tmp,*top; char m; top=s; tmp=s; while(*top==' ') top++; while(*tmp!=NULL ) { if(*tmp==' ') { m=*top; *top=*tmp; //这里开始有错 *tmp=m; tmp++; top++; }else { tmp++; } } return s; } void main() { char t[]="a b cd";//可以用数组,不能对char *t赋值 printf("%s",swap(t)); }
[解决办法]
数组可以,字符指针不行,就是我说的那个情况。见14楼。