博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【编程小练习】字符串大写字母转小写
阅读量:7041 次
发布时间:2019-06-28

本文共 2268 字,大约阅读时间需要 7 分钟。

【编程小练习】字符串大写字母转小写

题目很基础。既然是基础编程题,就尽量不要调用库函数,如tolower()。

以下给出作者的解法(思路详见注释):

#include 
char *stringLower(char *pszIn/*非字符串字面量(Literal)*/) { //为提高效率,应由调用者保证参数有效性 assert(pszIn != NULL); //此处assert作为双重保险(可删去) char *pszOrig = pszIn; while(*pszIn) { if((*pszIn >= 'A') && (*pszIn <= 'Z')) //简洁灵活,如转换部分字母时(ABCD...->aBcD...) *pszIn = "abcdefghijklmnopqrstuvwxyz"[*pszIn-'A']; pszIn++; } return pszOrig; //支持链式运算}#include
int main(void) { char szInput[256] = {0}; while(scanf("%s", szInput) != EOF) { printf("Original String: %s\n", szInput); printf("Converted String: %s\n", stringLower(szInput)); } return 0;}

运行效果如下:

Original String:  dw2325*&*(()T$*GDHJJSH89.Converted String: dw2325*&*(()t$*gdhjjsh89.

熟悉表驱动法编程的读者很容易看出,"abcdefghijklmnopqrstuvwxyz"其实是张预置的字符转换表。更进一步,可理解为一种"模式"。基于这一思想,提取该表作为函数入参,由调用者提供。代码如下:

char *stringConverter(char *pszIn/*非字符串字面量(Literal)*/, char *pszPattern) {    assert(pszIn != NULL);    if(NULL == pszPattern) //缺省模式为大写字母转小写字母        pszPattern = "abcdefghijklmnopqrstuvwxyz";    char *pszOrig = pszIn;    while(*pszIn) {        if((*pszIn >= 'A') && (*pszIn <= 'Z'))            *pszIn = pszPattern[*pszIn-'A'];        pszIn++;    }    return pszOrig;}#include 
int main(void) { char szInput[256] = {0}; char *pszMe = "Wang Xiaoyuan, Nanjing City, Jiangsu Province, P.R.C"; printf("Original String: %s\n", pszMe); //1. 大写字母转小写 strcpy(szInput, pszMe); printf("Converted String: %s(lwr)\n", stringConverter(szInput, NULL)); //2. 序号(从1开始)为偶数的大写字母转小写 strcpy(szInput, pszMe); printf("Converted String: %s(u&l)\n", stringConverter(szInput, "AbCdEfGhIjKlMnOpQrStUvWxYz")); //3. 字母表前半部的大写字母转小写 strcpy(szInput, pszMe); printf("Converted String: %s(hal)\n", stringConverter(szInput, "abcdefghijklmNOPQRSTUVWXYZ")); return 0;}

运行效果如下:

Original String:  Wang Xiaoyuan, Nanjing City, Jiangsu Province, P.R.CConverted String: wang xiaoyuan, nanjing city, jiangsu province, p.r.c(lwr)Converted String: Wang xiaoyuan, nanjing City, jiangsu province, p.r.C(u&l)Converted String: Wang Xiaoyuan, Nanjing city, jiangsu Province, P.R.c(hal)

由于stringConverter()函数只能处理大写字母,实际意义很有限。然而,本文的目的在于通过深化该练习,展示一种编程新意。足矣。

转载地址:http://cchal.baihongyu.com/

你可能感兴趣的文章
总结系列_13(Qt使用总结,续...)
查看>>
Memory Barrier in Compiler and CPU
查看>>
Python默认版本切换
查看>>
数据结构与算法面试题80道(23)
查看>>
C#.NET解析XML(简单实例)
查看>>
osg实例介绍
查看>>
POJ 1200 Crazy Search【Hash入门】
查看>>
Python(socket编程——2)
查看>>
BUAA-OO 第二单元作业“电梯调度”总结与思考
查看>>
redis 系列17 持久化 AOF
查看>>
Android学习5—布局简介
查看>>
bootstrap按钮
查看>>
Spring MVC Mock demo
查看>>
Mybatis与Spring的原生Dao整合
查看>>
Linux操作系统上用数据泵导库
查看>>
3n+1猜想
查看>>
【机器学习笔记一】协同过滤算法 - ALS
查看>>
数组,冒泡排序
查看>>
[洛谷] P1803 凌乱的yyy / 线段覆盖 (贪心)
查看>>
从客户端中检测到有潜在危险的 Request.Form 值。
查看>>