一个大小写转换的若干小问题(来自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;
}
问题: 为什么得不到想要的结果?
应该输出一字符串,而不是一个字符才对,问题出在了哪里?
[解决办法]
主要的问题在于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;
}