user-0 提问: 求助大佬解题，C语言

回复:
user: user-1
content: 引用 1 楼 user-2 的回复:SHOW一个吧，看看符合要求不？  #include <string.h> #include <stdio.h> #include <ctype.h>  #define LEN 31   /* 去掉左空格 */ char *left_trim(char *str) {     char *beginp = str;     char *tmp = str;     while(isspace(*beginp)) beginp++;     while((*tmp++ = *beginp++));       return str; }  /* 去掉右空格 */ char *right_trim(char *str) {     char *endp;     size_t len = strlen(str);       if(len == 0) return str;       endp = str + strlen(str) - 1;     while(isspace(*endp)) endp--;     *(endp + 1) = '\0';       return str; }  /* 去掉空格 */ char *trim(char *str) {     str = left_trim(str);     str = right_trim(str);       return str; }   int main(void) {     char buf[LEN];     char result[LEN+2];          /* 循环读入字符串，并处理。 */     while(fgets(buf, LEN, stdin))     {         /* 去掉换行符 */         if(buf[strlen(buf)-1] == '\n')         {             buf[strlen(buf)-1] = '\0';         } 	         /* 输出结果 */         printf("[%s]\n", buf);         printf("[%s]\n", trim(buf));     }              return 0; }   换行符有可能不会加入到buf中，所以需要注意一下～

user: user-2
content: SHOW一个吧，看看符合要求不？  #include <string.h> #include <stdio.h> #include <ctype.h>  #define LEN 31   /* 去掉左空格 */ char *left_trim(char *str) {     char *beginp = str;     char *tmp = str;     while(isspace(*beginp)) beginp++;     while((*tmp++ = *beginp++));       return str; }  /* 去掉右空格 */ char *right_trim(char *str) {     char *endp;     size_t len = strlen(str);       if(len == 0) return str;       endp = str + strlen(str) - 1;     while(isspace(*endp)) endp--;     *(endp + 1) = '\0';       return str; }  /* 去掉空格 */ char *trim(char *str) {     str = left_trim(str);     str = right_trim(str);       return str; }   int main(void) {     char buf[LEN];     char result[LEN+2];          /* 循环读入字符串，并处理。 */     while(fgets(buf, LEN, stdin))     {         /* 去掉换行符 */         if(buf[strlen(buf)-1] == '\n')         {             buf[strlen(buf)-1] = '\0';         } 	         /* 输出结果 */         printf("[%s]\n", buf);         printf("[%s]\n", trim(buf));     }              return 0; }

user: user-1
content: 引用 10 楼 晨星永恒 的回复:[quote=引用 9 楼 自信男孩 的回复:]#include <stdio.h> #include <string.h>  #define MAX_STR_SIZE    31  char *del_front_tail_spaces(char *str, int len) {     int pos = len-1, i;      //deal with tail     while (str[pos] == ' ')         pos--;     str[pos+1] = 0;      //deal with front     pos = 0;     while (str[pos] == ' ')         pos++;     for (i = 0; str[pos+i]; i++)    //move data replace spaces         str[i] = str[pos+i];     str[i] = 0;      return str; }  int main(void) {     char str[MAX_STR_SIZE];     int len;      fgets(str, MAX_STR_SIZE, stdin);      len = strlen(str);     if (len < MAX_STR_SIZE - 1) {         str[len-1] = 0;   //'\0' replace '\n'         len--;     }       printf("[%s]\n", str);      del_front_tail_spaces(str, len);      printf("[%s]\n", str);     return 0; } 供参考～ 大佬，你这个是第一二个正确，第三个错误[/quote]  找一下对应的测试用例～

user: user-2
content: 我改了一下，把前面3个函数变成1个函数，看看是不是函数调用问题，嵌套太大，影响效率了。。  #include <string.h> #include <stdio.h>   #define LEN 31    /* 去掉空格 */ char *trim(char *str) {     char *beginp, *endp, *tmp;     size_t len = strlen(str);      if(len == 0) return str;        endp = str + strlen(str) - 1;     while(*endp == ' ') endp--;     *(endp + 1) = '\0';          beginp = tmp = str;         while(*beginp == ' ') beginp++;     while((*tmp++ = *beginp++));          return str; }    int main(void) {     char buf[LEN];           /* 循环读入字符串，并处理。 */     if(fgets(buf, LEN, stdin))     {         /* 去掉换行符 */         if(buf[strlen(buf)-1] == '\n')         {             buf[strlen(buf)-1] = '\0';         }               /* 输出结果 */         printf("[%s]\n", buf);         printf("[%s]\n", trim(buf));     }               return 0; }

user: user-0
content: #include<stdio.h> #include<string.h> int main() {     char a[100];     int i=0,b;     gets(a);     printf("[%s]\n",a);     while(1)     {if(a[0]==' ')     {         for(i=0;i<strlen(a);i++)             a[i]=a[i+1];     }      else          break;     }      b=strlen(a)-1;     while(1)      {          if(a[b]==' ')          {              a[b]=0;              b--;          }         else             break;      }     printf("[%s]",a);          return 0; } 我这种是最后一个正确，前两个错误

user: user-0
content: 引用 9 楼 自信男孩 的回复:#include <stdio.h> #include <string.h>  #define MAX_STR_SIZE    31  char *del_front_tail_spaces(char *str, int len) {     int pos = len-1, i;      //deal with tail     while (str[pos] == ' ')         pos--;     str[pos+1] = 0;      //deal with front     pos = 0;     while (str[pos] == ' ')         pos++;     for (i = 0; str[pos+i]; i++)    //move data replace spaces         str[i] = str[pos+i];     str[i] = 0;      return str; }  int main(void) {     char str[MAX_STR_SIZE];     int len;      fgets(str, MAX_STR_SIZE, stdin);      len = strlen(str);     if (len < MAX_STR_SIZE - 1) {         str[len-1] = 0;   //'\0' replace '\n'         len--;     }       printf("[%s]\n", str);      del_front_tail_spaces(str, len);      printf("[%s]\n", str);     return 0; } 供参考～ 大佬，你这个是第一二个正确，第三个错误

user: user-1
content: #include <stdio.h> #include <string.h>  #define MAX_STR_SIZE    31  char *del_front_tail_spaces(char *str, int len) {     int pos = len-1, i;      //deal with tail     while (str[pos] == ' ')         pos--;     str[pos+1] = 0;      //deal with front     pos = 0;     while (str[pos] == ' ')         pos++;     for (i = 0; str[pos+i]; i++)    //move data replace spaces         str[i] = str[pos+i];     str[i] = 0;      return str; }  int main(void) {     char str[MAX_STR_SIZE];     int len;      fgets(str, MAX_STR_SIZE, stdin);      len = strlen(str);     if (len < MAX_STR_SIZE - 1) {         str[len-1] = 0;   //'\0' replace '\n'         len--;     }       printf("[%s]\n", str);      del_front_tail_spaces(str, len);      printf("[%s]\n", str);     return 0; } 供参考～

user: user-0
content: 引用 7 楼 user-2的回复:[quote=引用 4 楼 晨星永恒 的回复:]大佬，感觉还是有点问题，三项判断，最后一项正确  我个人理解题目只有2个要求：1、去掉首尾空客；2、不超过30个字符。 可能是我语文不好，可能还有暗含潜规则，我没看出来。[/quote] 我感觉也是这，但他就是说错误，也想不出这个题能有什么特殊情况了

user: user-2
content: 引用 4 楼 晨星永恒 的回复:大佬，感觉还是有点问题，三项判断，最后一项正确  我个人理解题目只有2个要求：1、去掉首尾空客；2、不超过30个字符。 可能是我语文不好，可能还有暗含潜规则，我没看出来。

user: user-0
content: 引用 2 楼 自信男孩的回复:[quote=引用 1 楼 user-2 的回复:]SHOW一个吧，看看符合要求不？  #include <string.h> #include <stdio.h> #include <ctype.h>  #define LEN 31   /* 去掉左空格 */ char *left_trim(char *str) {     char *beginp = str;     char *tmp = str;     while(isspace(*beginp)) beginp++;     while((*tmp++ = *beginp++));       return str; }  /* 去掉右空格 */ char *right_trim(char *str) {     char *endp;     size_t len = strlen(str);       if(len == 0) return str;       endp = str + strlen(str) - 1;     while(isspace(*endp)) endp--;     *(endp + 1) = '\0';       return str; }  /* 去掉空格 */ char *trim(char *str) {     str = left_trim(str);     str = right_trim(str);       return str; }   int main(void) {     char buf[LEN];     char result[LEN+2];          /* 循环读入字符串，并处理。 */     while(fgets(buf, LEN, stdin))     {         /* 去掉换行符 */         if(buf[strlen(buf)-1] == '\n')         {             buf[strlen(buf)-1] = '\0';         } 	         /* 输出结果 */         printf("[%s]\n", buf);         printf("[%s]\n", trim(buf));     }              return 0; }   换行符有可能不会加入到buf中，所以需要注意一下～[/quote] 不太懂

user: user-0

user: user-0
content: 引用 1 楼 user-2的回复:SHOW一个吧，看看符合要求不？  #include <string.h> #include <stdio.h> #include <ctype.h>  #define LEN 31   /* 去掉左空格 */ char *left_trim(char *str) {     char *beginp = str;     char *tmp = str;     while(isspace(*beginp)) beginp++;     while((*tmp++ = *beginp++));       return str; }  /* 去掉右空格 */ char *right_trim(char *str) {     char *endp;     size_t len = strlen(str);       if(len == 0) return str;       endp = str + strlen(str) - 1;     while(isspace(*endp)) endp--;     *(endp + 1) = '\0';       return str; }  /* 去掉空格 */ char *trim(char *str) {     str = left_trim(str);     str = right_trim(str);       return str; }   int main(void) {     char buf[LEN];     char result[LEN+2];          /* 循环读入字符串，并处理。 */     while(fgets(buf, LEN, stdin))     {         /* 去掉换行符 */         if(buf[strlen(buf)-1] == '\n')         {             buf[strlen(buf)-1] = '\0';         } 	         /* 输出结果 */         printf("[%s]\n", buf);         printf("[%s]\n", trim(buf));     }              return 0; }  大佬，感觉还是有点问题，三项判断，最后一项正确