第一篇博客!( •̀ ω •́ )y(就写一道题吧)
一道关于判断合法IP地址的题目
今天听同学说,他要用博客来记录自己的成长过程。
emmmmmmm.我觉得很有道理
所以我也打算踏上这条路辣!
首先,看到这道题的第一眼我觉得很简单
瞧这自信的语气,傲人的语言
然后受到了质疑
要强如我,当然是立马开始做题
然而当我信心满满的敲下这个函数以后
#include<iostream>
using namespace std;
char fun(char a[],int n)
{
int f=0;
int i,num=0;
for(i=0;i<n;i++)
{
for(;a[i]!='.';i++)
{
if(a[i]>='0'&&a[i]<='9')
num=num*10+a[i];
}
if(num>=0&&num<=255)
f=1;
else f=0;
num==0;
}
if(f=1)
return 'YES';
else return 'NO';
}
之后,我就陷入了沉思
(此时年轻的我还没有意识到判断函数是我的短板
直到昨天比赛时的一道类似判断的题我卡了两小时
让我意识到了我就是个白痴)
然后
我突然灵光一闪
我可以用指针数组,指向字符串数组(愚蠢的想法)
然后我检查了一下这个一下就写出来的函数
发现超过了255,程序就会跑不动卡在那里
甚至将错误的地址也输出为:YES
半小时后
我仍然在沉思
我的脑细胞已经离开了我的大脑
但我不甘心
不做出来我睡不着
于是在那个夜晚,我在电脑前待到了凌晨1点多
终于完成了正确版(自认为)
#include<iostream>
#include<string>
using namespace std;
void fun(char a[],int n)
{
int f=0;
int i,num=0,count=0;
for(i=0;i<n;i++)
{
for(i;a[i]!='.'&&i<n;)
{
if(a[i]>='0'&&a[i]<='9')
{num=num*10+(a[i]-'0');f=1;}
else {f=0;break;}
i++;
}
if(num>=0&&num<=255&&(a[i]=='.'||i==n))
{
f=1;
count++;
}
else f=0;
num=0;
if(f==0)
break;
}
if(f==1&&count==4)
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
int main()
{
int n;
cin>>n;
string a[n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
char *p=(char *)a[i].data();
fun(p,a[i].length());
}
}
不过在这个过程中
我还是学到了一个新知识:将字符串直接转换成字符数组
string a;
char *p=(char *)a.data();
我知道这个算法应该是只满足了最基础的解决问题的功能(甚至还没)
还有一些输入的可能性我还没有考虑到
(以后再来改进算法)
期待自己的成长!
????
(这个编辑器我还不是很会用,排版什么的还是有丶差劲)