醒醒别睡了


私信TA

用户名:Leopoid

访问量:1134

签 名:

等  级
排  名 22736
经  验 592
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 haha
专  业

  自我简介:

TA的其他文章

看了别人的方法后觉得自己的方法好愚笨,但花了我不少时间,说一下我的思路。


我是通过拆分录入的字符串再去判断的,用strchr这个函数去查找‘.’,然后获取‘.’前面的字符,再进行判断,判断结束后把剩下的字符串再赋值给str,可优化的地方有好多,然后最后一次再判断最后那一段的字符串。


这个方法可以去B站看浙江大学翁凯老师的C语言课,讲strchr的那一段,用的就是那个方法。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    int i,j,sn,flag=0,a[4];
    int sum=0;
    char str[31],ch;
    char * p;
//    while(scanf("%d.%d.%d.%d",&a[0],&a[1],&a[2],&a[3]))
	while((scanf("%s", &str))!=EOF){	
		for(j=0;j<3;j++){
			p=strchr(str,'.');
			char c=*p;
			*p='\0';
			char * t=(char*)malloc(strlen(str)+1);
			strcpy(t,str);
//			printf("%s\n",t);
			if(*t=='0'){
				flag=1;
				break;
			}
			for(i=0,sum=0;i<strlen(t);i++){
				ch=*(t+i);
				if(!((ch>='0')&&(ch<='9'))){
					flag=1;
					break;
				}
				sum+=(ch-48)*pow(10,strlen(t)-i-1);
			}
//			printf("%d\n",sum);
			if(flag==1){
				break;
			}
			if(!(sum>=0&&sum<=255)){
				flag=1;
				break;
			}
			*p=c;
//			printf("%s\n",p);
//			printf("%s",p+1);
			p=p+1;
//			printf("%d\n",strlen(p));
			for(i=0;i<strlen(p);i++){
				str[i]=*(p+i);
			}
			str[strlen(p)]='\0';
			
			free(t);
		}
//		printf("\n%s\n",str);
//		printf("%d",strlen(str));
		if(flag==0){
			for(j=0,sum=0;j<strlen(str);j++){
			ch=str[j];
				if(!((ch>='0')&&(ch<='9'))){
					flag=1;
					break;
				}
				sum+=(ch-48)*pow(10,strlen(str)-j-1);
			}
			if(!(sum>=0&&sum<=255)){
				flag=1;
			}
//			printf("%d\n",sum);
		}
		if(flag==1){
			printf("N\n");
		}else{
			printf("Y\n");
		}
		flag=0;
//		printf("%s",str);
	}
    return 0;
}


 

0.0分

0 人评分

  评论区