| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 955 人关注过本帖
标题:求解!大小写转换问题~
只看楼主 加入收藏
newproblem
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-11-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
求解!大小写转换问题~
#include <stdio.h>
int main(int argc, char *argv[])
{
    char a[80];int i;
    scanf("%s",a);
    for(i=0;a[i];i++)
    {
        if(a[i]>='A'&&a[i]<='Z')
            a[i]+=32;
        else if(a[i]>='a'&&a<='z')
            a[i]-=32;
        printf("%c",a[i]);
    }
    return 0;
}
为什么运行时只能把大写转化为小写,而小写无法转化为大写?求教~
搜索更多相关主题的帖子: include 
2011-11-21 00:36
Firewall1076
Rank: 2
等 级:论坛游民
帖 子:20
专家分:22
注 册:2011-11-19
收藏
得分:0 
scanf语句用错了哦,少了&
2011-11-21 01:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
/*----------------------------
    解决:英文字母大小写转换问题
    备注:由于现代计算机环境国际化,编写程序不能再依赖于传统的ASCII内码方式
编程环境:VS2010 C++, .NET4, 采用安全函数
-----------------------------*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 函数原型
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;
}


[ 本帖最后由 TonyDeng 于 2011-11-21 02:57 编辑 ]

授人以渔,不授人以鱼。
2011-11-21 02:46
newproblem
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-11-21
收藏
得分:0 
以下是引用Firewall1076在2011-11-21 01:18:12的发言:

scanf语句用错了哦,少了&
a是数组名啊,C中数组名代表该数组的起始地址,所以不用加&的啊……
2011-11-21 12:18
newproblem
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-11-21
收藏
得分:0 
以下是引用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程学到数组……能不能帮我找下,我哪里做错了?
2011-11-21 12:27
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:15 
(a[i]>='a'&&a<='z')这里写错了,加个 (a[i]>='a'&&a[i]<='z')
2011-11-21 12:29
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:5 
楼上正解,(a[i]>='a'&&a<='z')打错了,应该是(a[i]>='a' && a[i]<='z')

我们都在路上。。。。。
2011-11-21 12:39
newproblem
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-11-21
收藏
得分:0 
感谢楼上两位
2011-11-21 12:50
huhao3225
Rank: 2
来 自:四川成都
等 级:论坛游民
帖 子:39
专家分:25
注 册:2011-11-9
收藏
得分:0 
没必要那么麻烦吧
2011-11-21 18:10
快速回复:求解!大小写转换问题~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031333 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved