首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针难懂得,求看一段代码

2012-09-28 
指针难理解,求看一段代码我的本意是想实现这样的功能,将一个字符串中的所有空格提到字符的开始端。如“abc d

指针难理解,求看一段代码
我的本意是想实现这样的功能,将一个字符串中的所有空格提到字符的开始端。如“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=……

热点排行
Bad Request.