以下是引用TonyDeng在2011-11-21 02:46:18的发言:
/*----------------------------
解决:英文字母大小写转换问题
备注:由于现代计算机环境国际化,编写程序不能再依赖于传统的ASCII内码方式
编程环境:VS2010 C++, .NET4, 采用安全函数
-----------------------------*/
#include
#include
#include
// 函数原型
const char Convert_Letter(const char character);
const char* Convert_String(char* Str);
// 程序主入口
void main(void)
{
char str[1024] = {'\0'};
do
{
printf_s("请输入字符串(Enter):");
gets_s(str, _countof(str));
if (strlen(str) > 0)
{
printf_s("转换后的字符串:%s\n\n", Convert_String(str));
}
} while (strlen(str) > 0);
}
// 字符串大小写转换函数
const char* Convert_String(char* str)
{
char* p = str;
while (*p)
{
*p = Convert_Letter(*p);
++p;
}
return str;
}
// 字母大小写转换函数
const char Convert_Letter(const char character)
{
// 不希望存在全局数据的话,在这里定义静态数据进行封装,C模拟C++做法
static const char LetterTable[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
static const size_t LetterNumber = 26;
char ch = character; // 如果character不属于字母表中字符则将原样返回
if (const char* p = strchr(LetterTable, character))
{
if (p - LetterTable < LetterNumber - 1)
{
ch = *(p + LetterNumber); // 小写字母转为大写
}
else
{
ch = *(p - LetterNumber); // 大写字母转为小写
}
}
return ch;
}
这个……看不懂的说,我们刚学C程学到数组……能不能帮我找下,我哪里做错了?