第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

c++ string strInfo="硚"; 不包含 字符 ~,使用find也返回1

c++ string strInfo="硚"; 不包含 字符 ~,使用find也返回1

C++
潁川道人 2017-06-12 14:21:29
#include?<iostream> #include?<string> using?namespace?std; inline?string&???replace_all(string&???str,?const???string&???old_value,?const???string&???new_value) { while?(true) { string::size_type???pos(0); pos?=?str.find(old_value); //cout?<<pos<<?endl; if?(?(pos?=?str.find(old_value))?!=?string::npos???) str.replace(pos,?old_value.length(),?new_value); else break; } return???str; } int?main()?{ string?strInfo="硚"; string::size_type???pos(0); string?strInfo1="~"; pos?=strInfo.find(strInfo1); cout?<<pos<<?endl;? strInfo?=?replace_all(strInfo,?"~",?"#$");// cout?<<strInfo<<?endl;?//?prints?!!!Hello?World!!! }煩請(qǐng)大神解答下,string strInfo="硚"; 不包含 字符 ~,使用find也返回1
查看完整描述

1 回答

已采納
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

哈哈,這個(gè)很有意思。因?yàn)槲矣X得也不應(yīng)該 find 到,所以我就在我這里試了下,果然沒找到!


可你卻找到了!那么我猜得這是編碼問題(因?yàn)槲夷J(rèn)用的是 UTF-8 編碼),而且我猜你是在 Windows 系統(tǒng)下。我據(jù)此去查了下‘硚’的編碼,果然如此。這個(gè)結(jié)果非常有趣,我說一下:

Windows 使用的 ANSI 編碼會(huì)將一個(gè)漢字編碼為兩字節(jié)?!俺~”這個(gè)字的編碼是 b3 7e?!啊钡木幋a是 7e,恰好是硚編碼的第二個(gè)字節(jié)!

而 string 表示的是 char 字符串,也就是會(huì)把每個(gè)字符當(dāng)作 char 來處理——即會(huì)按字節(jié)來處理,所以 find 按 char 來查找就找到了 7e!


一般來說,涉及漢字的編碼會(huì)比較復(fù)雜,在初學(xué)做字符串的實(shí)驗(yàn)時(shí)不要用漢字!


P.S. 如果你一定要用漢字的話,就要用能夠處理“寬字符”的庫函數(shù)。std::wstring 是保存寬字符的字符串,在寫字符串字面量時(shí)在前面加上 L 表示其為寬字符串:

std::wstring?wchn?=?L"硚";
std::wstring?wtilde?=?L"~";
cout?<<?wchns.find(wtilde)?<<?endl;

這樣應(yīng)該就找不到了。 不過在初學(xué)時(shí)還是盡量避免用漢字吧!


查看完整回答
1 反對(duì) 回復(fù) 2017-06-13
  • 1 回答
  • 0 關(guān)注
  • 1478 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)