C++:大小写转换

1、transform

如果使用string类,可以使用#include <algorithm>里的如下方法进行大小写转换;(leetcode不支持这个函数)

transform(str.begin(),str.end(),str.begin(),::tolower);

记得::tolower前面有::, 而且是::tolower,不是::tolower()

#include <iostream>
#include <algorithm>
 
using namespace std;
string s;
int main() {
    cout<<"请输入一个含大写的字符串:";
    string str;
    cin>>str;
    ///转小写
    transform(str.begin(),str.end(),str.begin(),::tolower);
    cout<<"转化为小写后为:"<<str<<endl;
    //转大写
    transform(str.begin(),str.end(),str.begin(),::toupper);
    cout<<"转化为大写后为:"<<str<<endl;
    return 0;
}

在这里插入图片描述

2、tolower(char c)和toupper(char c)

如果用char数组,也可以自己手写两个转化为大写和小写方法,

此种方法用到了tolower(char c)toupper(char c)两个方法:

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void mytolower(char *s){
    int len=strlen(s);
    for(int i=0;i<len;i++){
        if(s[i]>='A'&&s[i]<='Z'){
            s[i]=tolower(s[i]);
            //s[i]+=32;//+32转换为小写
            //s[i]=s[i]-'A'+'a';
        }
    }
}
void mytoupper(char *s){
    int len=strlen(s);
    for(int i=0;i<len;i++){
        if(s[i]>='a'&&s[i]<='z'){
            s[i]=toupper(s[i]);
            //s[i]-=32;//+32转换为小写
            //s[i]=s[i]-'a'+'A';
        }
    }
}
 
int main() {
    cout<<"请输入一个含大写的字符串:";
    char s[201];
    gets(s);
    
    ///转小写
    mytolower(s);
    cout<<"转化为小写后为:"<<s<<endl;
    //转大写
    mytoupper(s);
    cout<<"转化为大写后为:"<<s<<endl;
    return 0;
}

在这里插入图片描述

3、strupr(char* a)和strlwr(char* d)

旧版vs:

#include <iostream>
#include <string>
using namespace std;

void main()
{
	char a[20]="jack";  //a的空间大小定义为20,务必容纳下连接后的所有字符
	char d[]  ="ABCDEF";
	
	strupr(a);                 //小写字符转大写字符
	cout<<a<<endl;
	strlwr(d);                 //大写字符转小写字符
	cout<<d<<endl;
}
 
运行结果:
JACK
abcdef

新版vs:

#include <iostream>
#include <string>
using namespace std;
#define _CRT_NONSTDC_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS

void main()
{
	char a[20] = "My name is ";  //a的空间大小定义为20,务必容纳下连接后的所有字符
	char d[] = "ABCDEF";

	_strupr_s(a);                 //小写字符转大写字符
	cout << a << endl;
	_strlwr_s(d);                 //大写字符转小写字符
	cout << d << endl;

		system("pause");
		return ;
}

运行结果:
MY NAME IS
abcdef

因为新版vs对strupr(char* a)和strlwr(char* d)存在兼容性问题,所以不推荐使用

4、位运算技巧

依旧遍历字符串,利用位运算技巧。

大写变小写、小写变大写 : 字符 ^= 32;
大写变小写、小写变小写 : 字符 |= 32;
小写变大写、大写变大写 : 字符 &= -33;

#include<iostream>
#include<string>
using namespace std;

class Solution {
public:
    string toChangeCase(string str) {
        for(auto &i : str){
            i |= 32;
        }
        return str; 
    }
};
int main()
{
	Solution s;
	string str = "HELLOhello";
	cout << s.toChangeCase(str) << endl;
	return 0;
}

参考:
文章1
文章2

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值