Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17534
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-04 10:14
文章分类
文章存档

2013年(12)

我的朋友

分类: C/C++

2013-04-14 20:25:57


点击(此处)折叠或打开

  1. #include<stdio.h>
  2.  #include<string.h>
  3.  #include<stdbool.h>

  4.  enum spectrum {red,orange,yellow,green,blue,violet};
  5.  const char * colors[]={"red","orange","yellow","green","blue","violet"};

  6.  #define LEN 30

  7.  int main(void)
  8.  {
  9.      char choice[LEN];
  10.      enum spectrum color;
  11.      bool color_is_found=false;

  12.      puts("Enter a color (empty line to quit):");
  13.      while(gets(choice)!=NULL&&choice[0]!='\0')
  14.      {
  15.          for(color=red;color<=violet;color++)
  16.          {
  17.              if(strcmp(choice,colors[color])==0)
  18.              {
  19.                  color_is_found=true;
  20.                  break;
  21.              }
  22.          }
  23.          if(color_is_found)
  24.          {
  25.              switch(color)
  26.              {
  27.                  case red:puts("Rose are red.");
  28.                  break;
  29.                  case orange:puts("Poppies are orange.");
  30.                  break;
  31.                  case yellow:puts("Sunflowers are yellow.");
  32.                  break;
  33.                  case green:puts("Grass is green.");
  34.                  break;
  35.                  case blue:puts("Bluebells are blue.");
  36.                  break;
  37.                  case violet:puts("Violets are violet.");
  38.                  break;
  39.              }
  40.          }    
  41.          else
  42.              printf("I don't know about the color %s.\n",choice);
  43.          color_is_found=false;
  44.          puts("Next color,please (empty line to quit):");

  45.      }
  46.      puts("Goodbye!");

  47.      return 0;

  48.  }


 


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>

  4. char showmenu(void);//显示菜单
  5. void eatline(void);//清除多余输入
  6. void show(void(* fp)(char *), char *str);//显示结果
  7. void ToUpper(char *);//转为大写
  8. void ToLower(char *);//转为小写
  9. void Transpose(char *);//大小写相互转化
  10. void Dummy(char *);///

  11. int main(void)
  12. {
  13.     char line[81];//接收输入
  14.     char copy[81];//存储输入的复制
  15.     char choice;//存储用户选择
  16.     void (*pfun)(char *);//声明pfun为 一个 返回为空 接收char *的函数指针

  17.     puts("Enter a string (empty line to quit):");
  18.     while(gets(line)!=NULL&&line[0]!='\0')//获取一个将被转换的字符串 判断结束
  19.     {
  20.         while((choice=showmenu())!='n')//显示菜单 获取选项
  21.         {
  22.             switch(choice)//根据选项 对pfun赋值
  23.             {
  24.                 case 'u':pfun=ToUpper;break;
  25.                 case 'l':pfun=ToLower;break;
  26.                 case 't':pfun=Transpose;break;
  27.                 case 'o':pfun=Dummy;break;
  28.             }
  29.             strcpy(copy,line);//复制 输入的字符串
  30.             show(pfun,copy);//显示结果
  31.         }
  32.         puts("Enter a string (empty line to quit):");
  33.     }
  34.     puts("Bye");

  35.     return 0;
  36. }

  37. char showmenu(void)
  38. {
  39.     char ans;
  40.     puts("Enter menu choice :");
  41.     puts("u)uppercase l)lowercase");
  42.     puts("t)transposecase o)originalcase");
  43.     puts("n)next string");
  44.     ans=getchar();//获取选择
  45.     ans=tolower(ans);//将ans 转换为小写字母
  46.     eatline();//清除多余输入
  47.     while(strchr("ulton",ans)==NULL)//匹配输入选项是否正确
  48.     {
  49.         puts("Please enter a u,l,t,o, or n;");
  50.         ans=tolower(getchar());
  51.         eatline();
  52.     }
  53.     return ans;
  54. }

  55. void eatline(void)
  56. {
  57.     while(getchar()!='\n')
  58.         continue;
  59. }

  60. void ToUpper(char *str)
  61. {
  62.     while(*str)
  63.     {
  64.         *str=toupper(*str);
  65.         str++;
  66.     }
  67. }

  68. void ToLower(char *str)
  69. {
  70.     while(*str)
  71.     {
  72.         *str=tolower(*str);
  73.         str++;
  74.     }
  75. }

  76. void Transpose(char * str)
  77. {
  78.     while(*str)
  79.     {
  80.         if(islower(*str))//小写转换为大写
  81.             *str=toupper(*str);
  82.         else//大写转换为小写
  83.             if(isupper(*str))
  84.                 *str=tolower(*str);
  85.         str++;
  86.     }
  87. }

  88. void Dummy(char *str)
  89. {

  90. }

  91. void show(void (* fp) (char *),char * str)
  92. {
  93.     (*fp)(str);
  94.     puts(str);
  95. }

阅读(283) | 评论(0) | 转发(0) |
0

上一篇:unit 14 练习

下一篇:顺序表练习1

给主人留下些什么吧!~~