題目難度不大,主要想復(fù)習(xí)幾個(gè)知識(shí)點(diǎn)。
- string類成員函數(shù),特別是字符串查找函數(shù)find(),find()函數(shù)的第一個(gè)形參是要被搜索的字符串,第二個(gè)形參是在源串中開始搜索的下標(biāo)位置,總是記反 :(
- 數(shù)字字符轉(zhuǎn)數(shù)字??梢允褂胹toi()函數(shù),還有一種方法就是使用c++標(biāo)準(zhǔn)庫sstream,<sstream>庫定義了三種類:istringstream、ostringstream、stringstream,分別進(jìn)行流的輸入、輸出以及輸入輸出操作??梢詫?shí)現(xiàn)對(duì)內(nèi)存中的數(shù)據(jù)進(jìn)行字符/數(shù)字轉(zhuǎn)換。
詳情參考鏈接:http://www.itdecent.cn/p/cafe63f670b9 - 使用正則表達(dá)式,對(duì)于字符序列的處理,推薦使用正則表達(dá)式,真的很間接,而且正則表達(dá)式的語法規(guī)則通用,c++、python等高級(jí)編程語言都有提供正則表達(dá)式包。
參考鏈接:
1)http://www.itdecent.cn/p/e8158ea41906
2)https://www.jb51.net/article/104447.htm
3)https://www.jb51.net/article/174385.htm
/*題目描述
現(xiàn)在IPV4下用一個(gè)32位無符號(hào)整數(shù)來表示,一般用點(diǎn)分方式來顯示,點(diǎn)將IP地址分成4個(gè)部分,每個(gè)部分為8位,表示成一個(gè)無符號(hào)整數(shù)(因此不需要用正號(hào)出現(xiàn)),如10.137.17.1,是我們非常熟悉的IP地址,一個(gè)IP地址串中沒有空格出現(xiàn)(因?yàn)橐硎境梢粋€(gè)32數(shù)字)。
現(xiàn)在需要你用程序來判斷IP是否合法。
輸入描述:
輸入一個(gè)ip地址
輸出描述:
返回判斷的結(jié)果YES or NO
*/
#include<iostream>
#include<string>
#include<sstream>
#include<regex>
using namespace std;
bool isIp(string ipstr)
{
int num;
int j=0;
for(int i=0;i<3;++i){
int index=ipstr.find('.',j);
num = stoi(ipstr.substr(j,index-j));
if(num<0 || num>255) return false;
j=index+1;
}
string end=ipstr.substr(j);
for(int i=0;i<end.length();++i){
if(end[i]<'0' || end[i]>'9') return false;
}
num = stoi(end);
if(num<0 || num>255) return false;
return true;
}
bool isIp1(string ipstr)
{
istringstream ipstream(ipstr);
int num[4];
char point[3];
string end;
ipstream>>num[0]>>point[0]>>num[1]>>point[1]>>num[2]>>point[2]>>num[3]>>end;
for(int i=0;i<3;++i){
if(num[i]<0 || num[i]>255) return false;
if(point[i]!='.') return false;
}
if(num[3]<0 || num[3]>255) return false;
if(!end.empty()) return false;
return true;
}
//使用正則表達(dá)式
bool isIp2(string ipstr)
{
regex pattern("((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)");
smatch res;
if(regex_match(ipstr,res,pattern)){
return true;
}
return false;
}
int main(int argc,char **argv)
{
string ipstr;
while(cin>>ipstr){
bool res=isIp2(ipstr);
if(res){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
// isIp2(ipstr);
}
return 0;
}