Chinaunix首页 | 论坛 | 博客
  • 博客访问: 384210
  • 博文数量: 48
  • 博客积分: 743
  • 博客等级: 上士
  • 技术积分: 956
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-22 13:51
文章分类

全部博文(48)

文章存档

2015年(3)

2014年(17)

2012年(23)

2011年(5)

分类: C/C++

2011-12-05 16:43:30

最近在学shell编程,在网上看到tr '[:upper:]' '[:lower:]' 可以把字符串中大写字母转换成小写字母,我就在这个的基础上写了一个脚本来自己学习学习
  1. #!/bin/bash
  2. #name: upper_to_lower.sh
  3. #the function is trun uper to lower
  4. #like ABCd to abcd

  5. haveuppernumber()
  6. {
  7.     #test if the string have upper number
  8.     str="$(echo $1 | tr '[:upper:]' '[:lower:]')"
  9.     if [ "$str" != $1 ] ; then #get some problem
  10.         echo "[#have upper number,and i well trun them to lower:#]"
  11.         return 1 #have upper number
  12.     else
  13.         return 0 #no upper number
  14.     fi
  15. }

  16. if [ $# -ne 1 ] ; then
  17.     echo "Usage: $0 " >&2
  18.     exit 1
  19. fi

  20. if ! haveuppernumber $1 ; then #when if is 0 it run?
  21. #if [ 0 ] ; then #in shell true return 0 ,false return 1
  22.     echo $1 | tr '[:upper:]' '[:lower:]' #it can turn the UPPER number to lower
  23. #    echo $1 | tr '[:lower:]' '[:upper:]' #it can turn the lower number to UPPER
  24. else
  25.     echo "[#no upper number:#]"
  26.     echo $1
  27. fi

  28. exit 0
功能说明:当输入”./upper_to_lower.sh AaBbCcdd“时会先判断输入格式是否正确,然后判断字符串中是否有大写字母如果有显示"[#have upper number,and i well trun them to lower:#]"和转换成小写字母后的字符串;如果没有大写字母显示"[#no upper number:#]"和小写字符串。
然后又试着用c语言实现相同的功能,如下:
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int haveuppernumber(char *p)
  4. {
  5.     char*q=p;
  6.     
  7.     for(;*q!='\0';q++)
  8.     {
  9.         if(*q>='A'&&*q<='Z')
  10.         {
  11.             printf("[#have upper number and i will turn them to lower #]\n");
  12.             return 1;
  13.         }
  14.     }
  15.     printf("[#no upper number#]\n");
  16.     return 0;
  17. }
  18. void turntolower(char *p)
  19. {
  20.     for(;*p != '\0';p++)
  21.     {
  22.         if(*p>='A' && *p<='Z')
  23.         {
  24.             *p+=' ';
  25.         }
  26.     }
  27. }

  28. int main(int argc , char *argv[])
  29. {
  30.     char *p;
  31.     p=argv[1];

  32.     if(argc != 2)
  33.     {
  34.         printf("Usage : %s \n",argv[0]);
  35.         exit(-1);
  36.     }
  37.     if(haveuppernumber(p))
  38.     {
  39.         turntolower(p);
  40.         printf("%s\n",argv[1]);
  41.     }
  42.     else
  43.     {
  44.         printf("%s\n",argv[1]);
  45.     }
  46.     return 0;
  47. }
阅读(6273) | 评论(5) | 转发(1) |
0

上一篇:没有了

下一篇:wait和waitpid详解

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

wangzy2082015-08-16 00:52:03

fussfuss1

lake_will: [code]*p+=' '; 这一句不清不楚
不如换成
#define LOWER_SUB_UPPER 32
*p+= LOWER_SUB_UPPER;
[/code].....
空格(' ')的asic码就是32啊,加大写字母A+' '就相当于A加了32 也就是把大写A变成了小写a了。

你这个写法很飘逸,不过很快心领神会,这样还得记得常用字符的ASCII码

回复 | 举报

fussfuss12011-12-07 12:39:34

lake_will: [code]*p+=' '; 这一句不清不楚
不如换成
#define LOWER_SUB_UPPER 32
*p+= LOWER_SUB_UPPER;
[/code].....
空格(' ')的asic码就是32啊,加大写字母A+' '就相当于A加了32 也就是把大写A变成了小写a了。

fussfuss12011-12-07 12:39:30

lake_will: [code]*p+=' '; 这一句不清不楚
不如换成
#define LOWER_SUB_UPPER 32
*p+= LOWER_SUB_UPPER;
[/code].....
空格(' ')的asic码就是32啊,加大写字母A+' '就相当于A加了32 也就是把大写A变成了小写a了。

lake_will2011-12-07 10:01:02

BTW, 这里怎么输入代码?code标签没用。

lake_will2011-12-07 09:59:18

[code]*p+=' '; 这一句不清不楚
不如换成
#define LOWER_SUB_UPPER 32
*p+= LOWER_SUB_UPPER;
[/code]