题目描述
判断IP地址是否合法,N行,以字符串形式输入,格式为a.b.c.d,每个均为整数,输出判断是否为有效IP
输入样例:
2
1.2.3.4
172.168.0.300
输出:
Yes
No
代码
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--) {
char s[100];
cin>>s;
int flag=1;
char *part=strtok(s,".");
while(part) {
int num=stoi(part);
if(num<0||num>255) {
cout<<"No"<<endl;
flag=0;
break;
}
else
part=strtok(NULL,".");
}
if(flag)
cout<<"Yes"<<endl;
}
}
补充知识
strtok
1.函数原型
char *strtok(char s[], const char *delim);
2.头文件
string.h
3.函数功能
分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。
4.返回值:返回下一个分割后的字符串指针,如果已无从分割则返回NULL
字符串指针和字符串数组
char *s="abc";
指向字符串常量的指针,此时abc存放在常量区,s在栈,指针指向的字符串只能访问不能修改,可以改变指针的指向
char s[10]="abc";
存放在栈区,可以修改
如果只读取,两个都可以用,修改只能用字符数组