101. IP地址 //輸入格式控制

時間限制 1000 ms 內存限制 65536 KB

題目描述

我們都學過計算機網絡,瞭解IPV4地址的點分十進制表示法。

你的任務很簡單:判斷一個字符串是否是一個合法的點分十進制表示的IPV4地址。

最低的IP地址是0.0.0.0,最高的IP地址是255.255.255.255。

PS :方便起見,認爲形似00.00.00.00的IP地址也是合法的。

 

輸入格式

第一行是一個整數T,代表輸入還剩下T行

以下的T行,每行都是一個字符串(不含空白字符)。字符串的長度保證不超過15,不小於1.

輸出格式

對於每個字符串,輸出一行。

如果它是一個合法的IPV4地址,輸出Yes。

否則,輸出No。

輸入樣例

3
59.64.130.18
f.a.t.e
1.23.45.678

輸出樣例

Yes
No
No
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int a[4];
		char c,s[20];
		memset(a,-1,sizeof(a));
		scanf("%s",s);//先用s數組接收輸入字符串 
		
		/*然後用sscanf將s按照點分十進制格式進行賦值,sscanf的返回值爲成功 
		賦值的個數 
		爲什麼是sscanf(s,"%d.%d.%d.%d%c",&a[0],&a[1],&a[2],&a[3],&c)==4
		而不是sscanf(s,"%d.%d.%d.%d",&a[0],&a[1],&a[2],&a[3])==4
		因爲不加%c的話1.1.1.1afaf這類格式(即正確的IP地址後還有多餘的其他字符)
		也算正確,如果加個%c,這種情況的sscanf返回值就是5了,可排除此類格式*/
		
		if(sscanf(s,"%d.%d.%d.%d%c",&a[0],&a[1],&a[2],&a[3],&c)==4&&
		 a[0]>=0&&a[0]<=255&&a[1]>=0&&a[1]<=255
		&&a[2]>=0&&a[2]<=255&&a[3]>=0&&a[3]<=255)
		  printf("Yes\n");
		else printf("No\n");
		
		//cout<<sscanf(s,"%d.%d.%d.%d",&a[0],&a[1],&a[2],&a[3])<<endl;
		//cout<<a[3]<<endl;
		
	}
} 
發佈了160 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章