常见C语言面试题之四:删除字符串头尾空格,字符串右对齐

来源:互联网 发布:淘宝怎么自定义尺码 编辑:程序博客网 时间:2024/06/05 09:30
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <malloc.h>
  5. struct st {
  6.   int id;
  7.   char ch;
  8.   char name[10];
  9.   double db;
  10. };
  11. char *rtrim(char *);
  12. char *ltrim(char *);
  13. char *rjust(char *);
  14. int _tmain(int argc, _TCHAR* argv[])
  15. {
  16.   //内存对齐  
  17.   int id;
  18.   struct st stu={9,'c',"name",3.14};
  19.   char ch;
  20.   char name[11];
  21.   double db;
  22.   printf("sizeof sturct=%d/n",sizeof(struct st)); //==24
  23.   memcpy(&id,&stu,sizeof(int));
  24.   printf("id=%d/n",id);
  25.   memcpy(&ch,(char *)&stu+sizeof(int),1);
  26.   printf("ch=%c/n",ch);
  27.   
  28.   memcpy(name,(char *)&stu+sizeof(int)+1,10);
  29.   printf("name=%s/n",name);
  30.   
  31.   memcpy(&db,(char *)&stu+16,sizeof(double));
  32.   printf("db=%lf/n",db);
  33.   //内存对齐
  34.   
  35.   //删除右边的空格
  36.   //用字符指针,则rtrim函数中无法修改,产生错误!!!
  37.   //char *trail_str="     AAAAA     ";
  38.   char trail_str1[]="     AAAAA     ";
  39.   printf("Before rtrim():%s/n", trail_str1);
  40.   printf("length:%d./n", strlen(trail_str1));
  41.   
  42.   rtrim(trail_str1); 
  43.   printf("After rtrim():%s/n", trail_str1);
  44.   printf("length:%d./n", strlen(trail_str1));
  45.   //删除左边的空格
  46.   char trail_str2[]="     AAAAA     ";
  47.   ltrim(trail_str2);
  48.   printf("After ltrim():%s/n", trail_str2);
  49.   printf("length:%d/n", strlen(trail_str2));
  50.   //右对齐
  51.   char trail_str3[] = "     AAAAA     ";
  52.   rjust(trail_str3);
  53.   printf("After rjust():%s/n", trail_str3);
  54.   printf("length:%d/n", strlen(trail_str3));  
  55.     return 0;
  56. }
  57. char* rtrim(char* str)
  58. {
  59.   int n = strlen(str)-1;
  60.   while(n>0)
  61.   {
  62.     if(*(str+n)==' ')
  63.     {
  64.       *(str+n)='/0';
  65.       //str[n]='/0';
  66.       n--;
  67.     }
  68.     else
  69.     {
  70.       break;
  71.     }
  72.   }
  73.   return str;
  74. }
  75. char *ltrim(char* str)
  76. {
  77.   strrev(str);
  78.   rtrim(str);   //调用上面的rtrim()函数
  79.   strrev(str);
  80.   return str;
  81. }
  82. char *rjust(char* str)
  83. {
  84.   int n = strlen(str);
  85.   char *dup_str;
  86.   dup_str=strdup(str);
  87.   rtrim(dup_str);    //调用上面的rtrim()函数
  88.   int m = strlen(dup_str);
  89.   sprintf(str, "%*.*s",n,m,dup_str);
  90.   free(dup_str);
  91.   return str;
  92. }