读书人

指针难懂得求看一段代码

发布时间: 2012-09-28 00:03:35 作者: rapoo

指针难理解,求看一段代码
我的本意是想实现这样的功能,将一个字符串中的所有空格提到字符的开始端。如“abc de fg”转换成“ abcdefg”。
下面的有错误,求帮我看一下,应该怎样写!谢谢!!!

C/C++ code
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;}


[解决办法]
你的错误不是指针引起的。
首先 ,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楼。
探讨

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=……

读书人网 >C语言

热点推荐