字符串倒置与进制转换

  1. /*输入一个英文句子,翻转句子中的单词顺序。但单词内的顺序不变。句子中单词空格隔开。 
  2. 为简单起见,标点符号和普通字母一样处理。 
  3. 例如输入"I am a student.",则输出“student. a am I”.*/  
  4. #include<stdio.h>  
  5. #include<assert.h>  
  6. void reverse(char *begin, char *end)  
  7. {  
  8.     char tmp;  
  9.     while (begin < --end)  
  10.     {  
  11.         tmp = *begin;  
  12.         *begin = *end;  
  13.         *end = tmp;  
  14.           
  15.         ++begin;  
  16.     }  
  17. }  
  18. char *word_reverse(char src[])  
  19. {  
  20.     char *p = src;  
  21.     char *pstart;  
  22.     char *pend;  
  23.       
  24.     assert(src != NULL);  
  25.       
  26.     while (*p)  
  27.     {  
  28.         while (*p == ' ')  
  29.             p++;  
  30.         pstart = p;  
  31.           
  32.         while (*p != ' ' && *p)  
  33.             p++;  
  34.         pend = p;  
  35.           
  36.         reverse(pstart, pend);  
  37.     }  
  38.     reverse (src, p);  
  39.       
  40.     return src;  
  41. }  
  42. int main()  
  43. {  
  44.     char src[] = "I am a student.";     
  45.     printf("%s\n", word_reverse(src));  
  46.       
  47.     return 0;  
  48. }
  49. /*将10进制转换为2-16进制*/  
  50. #include <stdio.h>  
  51. int main(void)  
  52. {  
  53.     int n,k,i,j,m=0;  
  54.     char str[38], tmp;  
  55.     printf("请输入要转换的10进制数n和要转换的进制k:");  
  56.     scanf("%d%d",&n,&k);  
  57.     while(n)  
  58.     {  
  59.         str[m++]=(n%k)["0123456789ABCDEF"];  
  60.         n/=k;  
  61.     }  
  62.     str[m]='\0';  
  63.     for(i=0,j=m-1;i<j;i++,j--) {
  64.         tmp = str[i]; str[i] = str[j]; str[j] = tmp;
  65.     }

  66.     printf("转换后为:%s\n",str);  
  67.     return 0;  

posted @ 2011-06-15 20:39  ACE封印  Views(302)  Comments(0Edit  收藏  举报