国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】STL 算法 ⑦ ( 二元謂詞使用場景 - 大小寫不敏感 set 集合 | tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母 | 基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象 )

這篇具有很好參考價值的文章主要介紹了【C++】STL 算法 ⑦ ( 二元謂詞使用場景 - 大小寫不敏感 set 集合 | tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母 | 基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象 )。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。





一、二元謂詞使用場景 - 大小寫不敏感 set 集合



1、需求分析


本篇博客中 , 實現(xiàn)一個 set 集合 , 存放 英文字母 組成的字符串 , 且 大小寫不敏感 ;

實現(xiàn)的方法 : 自定義字符串 對比排序規(guī)則 , 先 將 字符串 都轉(zhuǎn)為小寫字母 , 然后進行對比 ;


2、tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母


tolower 函數(shù)是 C / C++ 標(biāo)準(zhǔn)庫 中的函數(shù) , 其作用是 將 字符從 大寫形式 轉(zhuǎn)換為 小寫形式 , 該函數(shù)定義在 C++ 頭文件 的 <cctype> 中 或 C 語言頭文件的 <ctype.h> 中 ;

  • 如果傳入的 字符 是 大寫字母 , 將 該大寫字母 轉(zhuǎn)為小寫字母 并返回 ;
  • 如果傳入的 字符 是 小寫字母 , 將 該小寫字母 直接返回 ;

tolower 函數(shù)原型如下 :

int tolower(int c);
  • 參數(shù)解析 : 參數(shù) c 表示字符的 int 類型的值 ;
    • char -> int 類型轉(zhuǎn)換 : 參數(shù)中使用了 int 類型值 , 一般情況下此處應(yīng)該傳入一個 char 類型的值 , 該 字符 會被隱式地轉(zhuǎn)換為 int 類型 ;
    • 傳入的值需要 在 [ CHAR_MIN , CHAR_MAX ] 區(qū)間 中 , 或者 是 EOF ( -1 ) 值 ;
  • 返回值解析 : 如果 參數(shù) c 是 大寫字母 , 則返回對應(yīng)的小寫字母 ; 否則 , 返回 c 字符本身 ; 返回值是 int 類型的 , 但通??梢园踩貙⑵滢D(zhuǎn)換回 char 類型 ;

注意 : 為了保證 tolower 函數(shù)的行為 的 穩(wěn)定性 , 建議 先將 char 類型的參數(shù)轉(zhuǎn)換為 unsigned char , 然后 再傳遞給 tolower 函數(shù) ; 運行該程序的平臺可能是 Windows / Linux , Arm / 單片機 平臺 , 如果 char 在指定的平臺上 被當(dāng)作負(fù)數(shù)處理 , 直接傳遞給 tolower 可能會導(dǎo)致未定義的行為 ;


代碼示例 :

#include "iostream"
using namespace std;
#include <algorithm> 

int main() {

	string hello = "Hello, World!";

	// 將字符串中的所有字符元素轉(zhuǎn)為小寫字母
	transform(hello.begin(), hello.end(), hello.begin(), tolower);

	cout << hello << endl;
	
	// 控制臺暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");
	return 0;
};

執(zhí)行結(jié)果 :

hello, world!
Press any key to continue . . .

【C++】STL 算法 ⑦ ( 二元謂詞使用場景 - 大小寫不敏感 set 集合 | tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母 | 基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象 ),c++,算法,開發(fā)語言,STL,tolower,transform,toupper


3、toupper 函數(shù) - 將字符轉(zhuǎn)為大寫字母


與 tolower 函數(shù)對象 相對的是 toupper 函數(shù) , 可以將 字符 轉(zhuǎn)為 大寫形式 ;

toupper 函數(shù)原型如下 :

int toupper(int c);
  • 參數(shù)解析 : 參數(shù) c 表示字符的 int 類型的值 ;
    • char -> int 類型轉(zhuǎn)換 : 參數(shù)中使用了 int 類型值 , 一般情況下此處應(yīng)該傳入一個 char 類型的值 , 該 字符 會被隱式地轉(zhuǎn)換為 int 類型 ;
    • 傳入的值需要在 [ CHAR_MIN , CHAR_MAX ] 區(qū)間 中 , 或者是 EOF ( -1 ) 值 ;
  • 返回值解析 : 如果參數(shù) c 是 小寫字母 , 則返回對應(yīng)的大寫字母 ; 否則 , 返回 c 字符本身 ; 返回值是 int 類型的 , 但通??梢园踩貙⑵滢D(zhuǎn)換回 char 類型 ;

代碼示例 :

#include "iostream"
using namespace std;
#include <algorithm> 

int main() {

	string hello = "Hello, World!";

	// 將字符串中的所有字符元素轉(zhuǎn)為大寫字母
	transform(hello.begin(), hello.end(), hello.begin(), toupper);

	cout << hello << endl;
	
	// 控制臺暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");
	return 0;
};

執(zhí)行結(jié)果 :

HELLO, WORLD!
Press any key to continue . . .

【C++】STL 算法 ⑦ ( 二元謂詞使用場景 - 大小寫不敏感 set 集合 | tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母 | 基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象 ),c++,算法,開發(fā)語言,STL,tolower,transform,toupper


4、基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象


該 set 集合 的 比較函數(shù) 的 函數(shù)對象 , 是一個二元謂詞 ,

重寫的 函數(shù)調(diào)用操作符 函數(shù)如下 :

bool operator()(const string& str1, const string& str2)

接收 2 個 字符串 參數(shù) ,

注意 : 比較的前提是 不能修改實參的值 , 這里重新創(chuàng)建 2 個字符串 , 用于 將 字符串轉(zhuǎn)為 小節(jié)字母 并 進行比較 ;


首先 , 創(chuàng)建一個新的 字符串 對象 ;

		// 創(chuàng)建字符串
		string s1;

然后 , 根據(jù) 傳入的 字符串參數(shù)大小 , 設(shè)置 新創(chuàng)建的字符串對象 ;

		// 重新設(shè)置字符串大小
		s1.resize(str1.size());

最后 , 調(diào)用 transform 算法 , 將 字符串 中的字符元素 , 都轉(zhuǎn)為小寫字母 ;

		// 將字符串的所有元素都轉(zhuǎn)換為小寫元素
		transform(str1.begin(), str1.end(), s1.begin(), tolower); 

得到 全是 小寫字母 的字符串 后 , 使用該 小寫字母 字符串 與 另外一個參數(shù) 轉(zhuǎn)成的 小寫字母 字符串 進行對比 , 這樣就實現(xiàn)了 大小寫不敏感的 set 集合 ;


代碼示例如下 :

#include <algorithm>
#include "functional"

/// <summary>
/// 二元謂詞 大小寫不敏感比較
/// </summary>
class Compare
{
public:
	bool operator()(const string& str1, const string& str2) const
	{
		// 比較的前提是不能修改實參的值
		// 這里重新創(chuàng)建 2 個字符串 , 用于進行比較

		// 創(chuàng)建字符串
		string s1;
		// 重新設(shè)置字符串大小
		s1.resize(str1.size());
		// 將字符串的所有元素都轉(zhuǎn)換為小寫元素
		transform(str1.begin(), str1.end(), s1.begin(), tolower); //預(yù)定義函數(shù)對象 

		string s2;
		s2.resize(str2.size());
		transform(str2.begin(), str2.end(), s2.begin(), tolower); //預(yù)定義函數(shù)對象 

		// 從小到大進行排序
		return (s1 < s2);
	}
};




二、代碼示例 - 二元謂詞使用場景



1、普通的 set 集合查找元素 - 大小寫匹配查找成功


創(chuàng)建普通的 set 集合 , 并插入三個元素 ;

	// 創(chuàng)建一個 set 集合容器
	set<string> mySet;

	// 向容器中插入元素
	mySet.insert("b");
	mySet.insert("a");
	mySet.insert("c");

集合中的元素是

a b c

在集合中查找 字符串 " a " , 肯定能找到該元素 ;

代碼示例 :

#include "iostream"
using namespace std;
#include <set>
#include <algorithm>

int main() {

	// 創(chuàng)建一個 set 集合容器
	set<string> mySet;

	// 向容器中插入元素
	mySet.insert("b");
	mySet.insert("a");
	mySet.insert("c");

	// 向 foreach 循環(huán)中傳入 Lambda 表達式
	for_each(mySet.begin(), mySet.end(), [](string str) {
		std::cout << str << " ";
		});
	cout << endl;

	// 查找容器中的元素
	set<string>::iterator it = mySet.find("a"); //find函數(shù) 默認(rèn) 區(qū)分大小寫

	if (it != mySet.end()) {
		cout << "找到了元素" << endl;
	} else {
		cout << "沒有找到元素" << endl;
	}
	
	// 控制臺暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");
	return 0;
};

執(zhí)行結(jié)果 :

a b c
找到了元素
Press any key to continue . . .

【C++】STL 算法 ⑦ ( 二元謂詞使用場景 - 大小寫不敏感 set 集合 | tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母 | 基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象 ),c++,算法,開發(fā)語言,STL,tolower,transform,toupper


2、普通的 set 集合查找元素 - 大小寫不匹配查找失敗


創(chuàng)建普通的 set 集合 , 并插入三個元素 ;

	// 創(chuàng)建一個 set 集合容器
	set<string> mySet;

	// 向容器中插入元素
	mySet.insert("b");
	mySet.insert("a");
	mySet.insert("c");

集合中的元素是

a b c

在集合中查找 字符串 " A " , 找不到該元素 ;


代碼示例 :

#include "iostream"
using namespace std;
#include <set>
#include <algorithm>

int main() {

	// 創(chuàng)建一個 set 集合容器
	set<string> mySet;

	// 向容器中插入元素
	mySet.insert("b");
	mySet.insert("a");
	mySet.insert("c");

	// 向 foreach 循環(huán)中傳入 Lambda 表達式
	for_each(mySet.begin(), mySet.end(), [](string str) {
		std::cout << str << " ";
		});
	cout << endl;

	// 查找容器中的元素
	set<string>::iterator it = mySet.find("A"); //find函數(shù) 默認(rèn) 區(qū)分大小寫

	if (it != mySet.end()) {
		cout << "找到了元素" << endl;
	} else {
		cout << "沒有找到元素" << endl;
	}
	
	// 控制臺暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");
	return 0;
};

執(zhí)行結(jié)果 :

a b c
沒有找到元素
Press any key to continue . . .

【C++】STL 算法 ⑦ ( 二元謂詞使用場景 - 大小寫不敏感 set 集合 | tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母 | 基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象 ),c++,算法,開發(fā)語言,STL,tolower,transform,toupper


3、設(shè)置二元謂詞規(guī)則的 set 集合查找元素 - 大小寫不不敏感集合


在下面的代碼中 , 創(chuàng)建 set 集合時 , 指定了 集合元素的 排序規(guī)則 :

	// 創(chuàng)建一個 set 集合容器
	set<string, Compare> mySet;

該 Compare 排序規(guī)則 是一個 二元謂詞 , 在排序時 , 將字符串先轉(zhuǎn)為 小寫字母 , 然后進行排序 ;

/// <summary>
/// 二元謂詞 大小寫不敏感比較
/// </summary>
class Compare
{
public:
	bool operator()(const string& str1, const string& str2) const
	{
		// 比較的前提是不能修改實參的值
		// 這里重新創(chuàng)建 2 個字符串 , 用于進行比較

		// 創(chuàng)建字符串
		string s1;
		// 重新設(shè)置字符串大小
		s1.resize(str1.size());
		// 將字符串的所有元素都轉(zhuǎn)換為小寫元素
		transform(str1.begin(), str1.end(), s1.begin(), tolower); //預(yù)定義函數(shù)對象 

		string s2;
		s2.resize(str2.size());
		transform(str2.begin(), str2.end(), s2.begin(), tolower); //預(yù)定義函數(shù)對象 

		// 從小到大進行排序
		return (s1 < s2);
	}
};

在排序時 , 大小寫字母不敏感 , 即使是大寫字母 " A " , 也會當(dāng)做 " a " 進行排序 ;

查找元素時 , 查找 " A " 字符串 , 實際上查找的是 " a " 字符串 ;

使用 find 函數(shù) 查找元素時 , 可以找到 " A " 元素 ;


代碼示例 :

#include "iostream"
using namespace std;
#include <set>
#include <algorithm>
#include "functional"

/// <summary>
/// 二元謂詞 大小寫不敏感比較
/// </summary>
class Compare
{
public:
	bool operator()(const string& str1, const string& str2) const
	{
		// 比較的前提是不能修改實參的值
		// 這里重新創(chuàng)建 2 個字符串 , 用于進行比較

		// 創(chuàng)建字符串
		string s1;
		// 重新設(shè)置字符串大小
		s1.resize(str1.size());
		// 將字符串的所有元素都轉(zhuǎn)換為小寫元素
		transform(str1.begin(), str1.end(), s1.begin(), tolower); //預(yù)定義函數(shù)對象 

		string s2;
		s2.resize(str2.size());
		transform(str2.begin(), str2.end(), s2.begin(), tolower); //預(yù)定義函數(shù)對象 

		// 從小到大進行排序
		return (s1 < s2);
	}
};

int main() {

	// 創(chuàng)建一個 set 集合容器
	set<string, Compare> mySet;

	// 向容器中插入元素
	mySet.insert("b");
	mySet.insert("a");
	mySet.insert("c");

	// 向 foreach 循環(huán)中傳入 Lambda 表達式
	for_each(mySet.begin(), mySet.end(), [](string str) {
		std::cout << str << " ";
		});
	cout << endl;

	// 查找容器中的元素
	set<string>::iterator it = mySet.find("A"); //find函數(shù) 默認(rèn) 區(qū)分大小寫

	if (it != mySet.end()) {
		cout << "找到了元素" << endl;
	} else {
		cout << "沒有找到元素" << endl;
	}
	
	// 控制臺暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");
	return 0;
};

執(zhí)行結(jié)果 :

a b c
找到了元素
Press any key to continue . . .

【C++】STL 算法 ⑦ ( 二元謂詞使用場景 - 大小寫不敏感 set 集合 | tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母 | 基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象 ),c++,算法,開發(fā)語言,STL,tolower,transform,toupper文章來源地址http://www.zghlxwxcb.cn/news/detail-782153.html

到了這里,關(guān)于【C++】STL 算法 ⑦ ( 二元謂詞使用場景 - 大小寫不敏感 set 集合 | tolower 函數(shù) - 將字符轉(zhuǎn)為小寫字母 | 基于 tolower 實現(xiàn)大小寫不敏感的比較函數(shù)對象 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 使用python判斷字母大小寫的幾種方法

    使用Python中的內(nèi)置函數(shù) isupper() 和 islower() 來判斷一個字母是否為大寫或小寫字母。 用戶輸入一個字母,程序使用isupper()和islower()函數(shù)判斷字母是否為大寫或小寫,并輸出相應(yīng)的信息。如果用戶輸入了除字母以外的字符,程序會輸出一個錯誤信息。 使用ASCII碼值來判斷字母大

    2024年02月04日
    瀏覽(78)
  • 【C語言數(shù)據(jù)類型】字符類型char如何使用?字母大小寫轉(zhuǎn)換?

    【C語言數(shù)據(jù)類型】字符類型char如何使用?字母大小寫轉(zhuǎn)換?

    c語言基本數(shù)據(jù)類型包括 1.常量 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.整型和浮點型 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3. 字符型 這篇文章來記錄一下自己學(xué)習(xí)字符類型char時的筆記以及心得 (1).定義: char是用于C或C++中定義字符型變量,只占一個字節(jié) (2).范圍

    2024年02月06日
    瀏覽(101)
  • 【Java 筆記】使用Fastjson2時,對象轉(zhuǎn)json首字母大小寫問題

    【Java 筆記】使用Fastjson2時,對象轉(zhuǎn)json首字母大小寫問題

    開發(fā)環(huán)境: 一、JSON 轉(zhuǎn) Object 1.問題: 2.解決方案 二、Object轉(zhuǎn) JSON 三、SpringBoot設(shè)置fastjson2 為默認(rèn) pom.xml 2. 配置類 四、FastJson2 注解 默認(rèn) 2. @JSONType 類注解 3. @JSONField(name = \\\"othername\\\") 屬性注解 五、思考問題 Java 對象為什么需要序列化? 為什么對象沒有實現(xiàn)Serializable接口,也可以

    2024年02月16日
    瀏覽(23)
  • 【藍橋杯備賽Java組】語言基礎(chǔ)|競賽常用庫函數(shù)|輸入輸出|String的使用|常見的數(shù)學(xué)方法|大小寫轉(zhuǎn)換

    【藍橋杯備賽Java組】語言基礎(chǔ)|競賽常用庫函數(shù)|輸入輸出|String的使用|常見的數(shù)學(xué)方法|大小寫轉(zhuǎn)換

    ???個人主頁:深魚~ ??收錄專欄:藍橋杯 ??歡迎 ??點贊?評論?收藏 目錄 一、編程基礎(chǔ) 1.1 Java類的創(chuàng)建 ?1.2 Java方法 ?1.3 輸入輸出 ?1.4 String的使用 二、競賽常用庫函數(shù) 1.常見的數(shù)學(xué)方法 2.大小寫轉(zhuǎn)換 前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,

    2024年01月21日
    瀏覽(89)
  • 【藍橋杯備賽Java組】第一章·語言基礎(chǔ)|競賽常用庫函數(shù)|輸入輸出|String的使用|常見的數(shù)學(xué)方法|大小寫轉(zhuǎn)換

    【藍橋杯備賽Java組】第一章·語言基礎(chǔ)|競賽常用庫函數(shù)|輸入輸出|String的使用|常見的數(shù)學(xué)方法|大小寫轉(zhuǎn)換

    ???個人主頁:深魚~ ??收錄專欄:藍橋杯 ??歡迎 ??點贊?評論?收藏 目錄 一、編程基礎(chǔ) 1.1 Java類的創(chuàng)建 ?1.2 Java方法 ?1.3 輸入輸出 ?1.4 String的使用 二、競賽常用庫函數(shù) 1.常見的數(shù)學(xué)方法 2.大小寫轉(zhuǎn)換 前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,

    2024年01月19日
    瀏覽(97)
  • Python 大小寫轉(zhuǎn)換

    1.lower() 將字符串中的大寫字母轉(zhuǎn)換成小寫字母 語法:str.lower() 2.upper() 將字符串的小寫字母轉(zhuǎn)換為大寫字母 語法:str.upper() 3.capitalize() 將字符串的第一個字母變成大寫,其余字母變?yōu)樾憽?語法:str.capitalize() ? 4.title() 返回一個滿足標(biāo)題格式的字符串,即所有英文單詞首字

    2024年02月13日
    瀏覽(97)
  • MySQL:區(qū)分大小寫

    MySQL:區(qū)分大小寫

    本文有點不準(zhǔn),僅作參考;可以使用MySQL的大小寫相互轉(zhuǎn)換,再拼接or來規(guī)避 查看MySQL版本?show variables;? 1、查看 MySQL 當(dāng)前的區(qū)分大小寫設(shè)置: SHOW VARIABLES LIKE \\\'lower_case_table_names\\\'; 或者 show Variables like \\\'%table_names\\\' 2、更改大小寫敏感設(shè)置: 在 MySQL 5.7 中,更改大小寫敏感設(shè)置要

    2024年02月03日
    瀏覽(171)
  • 【ElasticSearch查詢忽略大小寫】

    ElasticSearch查詢忽略大小寫 1、常用文檔類型(數(shù)據(jù)查詢字段) 2、問題解決思路 2.1 查看當(dāng)前索引下是否進行分詞 在Kinaba中執(zhí)行上述語句,結(jié)果如下: token 就是對應(yīng)的分詞后的結(jié)果(此處是我已經(jīng)設(shè)置完了的,所以雖然存儲之前是大寫TEST,但是經(jīng)過處理后存儲的索引結(jié)果是小

    2024年02月03日
    瀏覽(91)
  • Git 忽略文件大小寫

    ? 遇到的情況 git提交文件的時候,默認(rèn)是 不區(qū)分 大小寫更改的, 這樣會導(dǎo)致修改文件名大小寫后,git提交不生效,導(dǎo)致代碼運行失效。 也就是說默認(rèn)情況下,在Git看來 SEB001.java 和 seb001.java 其實是一個文件 ? 解決 使用如下命令行忽略大小寫即可。 git config core.ignorecase

    2024年02月08日
    瀏覽(107)
  • hive查詢區(qū)分大小寫

    在Hive中,默認(rèn)情況下,字段名是不區(qū)分大小寫的,這意味著在查詢中使用大寫或小寫字母來引用字段名稱都是可以的。其實mysql也是一樣的,大部分都不會區(qū)分大小寫。 但是在部分業(yè)務(wù)場景時需要對這類數(shù)據(jù)進行處理,有這么幾個方法可以嘗試嘗試。 啟用此模式后,Hive將嚴(yán)

    2024年02月13日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包