首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个大小写转换的若干小疑点(来自huawei笔试题)

2013-03-17 
一个大小写转换的若干小问题(来自huawei笔试题)问题描述:实现一个函数,把一个字符串中的小写字母改写成大

一个大小写转换的若干小问题(来自huawei笔试题)
问题描述:

实现一个函数,把一个字符串中的小写字母改写成大写字母

代码如下:

#include <iostream>

using namespace std;

int upper(char *s)
{
int i=0;
//char *s;

while( s[i]!='\0')//检测,是否到字符串的末尾
{
if(s[i]>97 && s[i]<(97+26)) s[i]=s[i]-32;//对于每个字符,检测是否为小写字母,并进行相应处理
i++;//脚标,用于移动指针
}
 return 0;

}

int main()
{
char str[100];//定义字符串大小,暂定100字节

cin >>str;//输入字符串


cout <<str<<endl;

upper(str);//调用upper()函数进行处理

cout <<str<<endl;

return 0;
}



问题: 为什么得不到想要的结果?
应该输出一字符串,而不是一个字符才对,问题出在了哪里?一个大小写转换的若干小疑点(来自huawei笔试题)
[解决办法]
主要的问题在于cin >>str输入字符串遇到空格就被截断了:


#include <iostream>
#include <cstdio>

using namespace std;

int upper(char *s)
{
int i=0;
//char *s;

while( s[i]!='\0') //检测,是否到字符串的末尾
{
if(s[i]>='a' && s[i]<='z') s[i]=s[i]-'a'+'A'; //对于每个字符,检测是否为小写字母,并进行相应处理
i++; //脚标,用于移动指针
}
 return 0;

}

int main()
{
char str[100]; // 定义字符串大小,暂定100字节

//cin >>str; //输入字符串
fgets(str, 100, stdin);


cout <<str<<endl;

upper(str); //调用upper()函数进行处理

cout <<str<<endl;

return 0;
}

[解决办法]
int upper(char *s)
{
int i=0;

while( *s != '\0') //检测,是否到字符串的末尾

if(*s >= 'a' && *s <= 'z')
*s -=   'a' - 'A' ; //对于每个字符,检测是否为小写字母,并进行相应处理
s++; //脚标,用于移动指针
}
return 0;

}

[解决办法]
最好直接用系统提供的tolower和toupper函数,因为大小写转换是locale(语言、国家、文化)相关的。
参考setlocale和_wsetlocale函数。
[解决办法]
建议楼主使用ges函数来读入含有空格的字符串

热点排行