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

来源:互联网  时间:2016/9/2 6:21:13

关于网友提出的“ 一个大小写转换的若干小问题(来自huawei笔试题)”问题疑问,本网通过在网上对“ 一个大小写转换的若干小问题(来自huawei笔试题)”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

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

问题描述:
实现一个函数,把一个字符串中的小写字母改写成大写字母
代码如下:
#include 
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 <<><>
upper(str); //调用upper()函数进行处理
cout <<><>
return 0;
}
问题: 为什么得不到想要的结果?
应该输出一字符串,而不是一个字符才对,问题出在了哪里? 一个大小写转换的若干小问题(来自huawei笔试题)


解决方案1:

建议楼主使用ges函数来读入含有空格的字符串

解决方案2:

最好直接用系统提供的tolower和toupper函数,因为大小写转换是locale(语言、国家、文化)相关的。
参考setlocale和_wsetlocale函数。

解决方案3:

int upper(char *s)
{
int i=0;
while( *s != '\0') //检测,是否到字符串的末尾

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

主要的问题在于cin >>str输入字符串遇到空格就被截断了:


#include 
#include 
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 <<><>
upper(str); //调用upper()函数进行处理
cout <<><>
return 0;
}

上一篇求算法,一维列表按n指定变成二维列表
下一篇有没有人用VC2008英文版权的
明星图片
相关文章
《 一个大小写转换的若干小问题(来自huawei笔试题)》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)