华为OJ测试题——判断输入的字符串是不是一个有效的IP地址(附世上最全测试数据)

题目标题:

  • 判断输入的字符串是不是一个有效的IP地址

详细描述:

请实现如下接口

boolisIPAddressValid(constchar* pszIPAddr)

输入:pszIPAddr 字符串

输出:true 有效的IP地址,false,无效的IP地址

约束

  1. 输入IP为XXX.XXX.XXX.XXX格式
  2. 字符串两端含有空格认为是合法IP
  3. 字符串中间含有空格认为是不合法IP
  4. 类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP
  5. 子段为单个0 认为是合法IP,0.0.0.0也算合法IP

这个题目也非常简单,但是我们的代码经不住测试,为什么呢,因为这个格式要求默认有很多,我们要做细心人!

给出多组测试数据:

/**********************************

NULL

0.0.0.0

01.2.0.6

255.2.256.0

256.22.234

34 .45.345.6

2. 3.3.3

0.1.0.0

00.00.32.67

**********************************/

下面给出代码,欢迎补充!

#include "IPAddressValid.h"
#include<iostream>
using namespace std;

#include "IPAddressValid.h"
#include <cstring>
#include <iostream>
#include <cstdio>
using namespace std;  

bool isIPAddressValid(const char* pszIPAddr)
{
	if(pszIPAddr==NULL || pszIPAddr=="") return false;
    // 请在此处实现
	int slen=strlen(pszIPAddr);
//	cout<<slen<<endl;
	int i,j,k,m,n,sum;
	int sublen[10];
	const char *ss=pszIPAddr;
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>//去除头尾空格
	for(i=0;i<slen && ss[i]==' ';i++);
	if(i==slen)return false;
	for(j=slen-1;j>=0 && ss[j]==' ';j--);
	if(j==0)return false;
	if(i>=j)return false;
<span style="white-space:pre">	</span>//判断字符串中间是否有空格,如果有则false
	for(k=i;k<j;k++)
		if(ss[k]==' ')return false;
//	cout<<i<<" "<<j<<endl;
<span style="white-space:pre">	</span>//记录字符串出现的‘.',如果点出现在第一个字符或者相邻的元素也是点则false
	m=0;
	for(k=i;k<=j;k++)
	{
		if(ss[k]=='.')
		{
			sublen[m++]=k;
			if(k==i || k==j) return false;
			if(ss[k+1]=='.')return false;
		}
	}
<span style="white-space:pre">	</span>//如果点数不是3个则false
	if(m!=3)return false;
	sublen[m++]=j+1;
	//for(k=1;k<m;k++)
	//	if((sublen[k]-sublen[k-1])>4)return false;
//	for(k=0;k<m;k++)
//		cout<<sublen[k]<<" ";
//	cout<<endl;
<span style="white-space:pre">	</span>//判断各子段是否为0开头,如果是则判断是不是本子段只有0,如果不是则false
	n=0;k=i;
	while(n<m){
	//	for(k=i;k<sublen[n] && ss[k]=='0';k++);
	//	if(ss[k]!='0' && k<sublen[n] && k>i)return false;

		if(ss[k]=='0')
		{
			if(k+1<slen && ss[k+1]!='.')return false;
		}
		k=sublen[n]+1;
		n++;
	}
<span style="white-space:pre">	</span>//判断各子段转化的整数是否在0~255之间,如果不是则false
	n=0;
	while(n<m){
		sum=0;
		for(k=i;k<sublen[n];k++)
		{
			if(ss[k]<'0' || ss[k]>'9')return false;
			sum=sum*10+ss[k]-'0';
		}
		if(sum>255)return false;
		i=sublen[n]+1;
		n++;
	}
    return true;
}
时间: 2024-12-25 11:28:20

华为OJ测试题——判断输入的字符串是不是一个有效的IP地址(附世上最全测试数据)的相关文章

华为oj-判断输入的字符串是不是一个有效的IP地址

题目标题: 判断输入的字符串是不是一个有效的IP地址 详细描述: 请实现如下接口 boolisIPAddressValid(constchar* pszIPAddr) 输入:pszIPAddr 字符串 输出:true 有效的IP地址,false,无效的IP地址 约束 输入IP为XXX.XXX.XXX.XXX格式 字符串两端含有空格认为是合法IP 字符串中间含有空格认为是不合法IP 类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP 子段为单个0 认为是合法IP,0.0.

华为OJ:2199 判断输入字符串中的括号匹配

根据不同的括号有个计数器,在遍历时,当计数器小于0则返回false或者当遍历完后,计数器仍旧不为零,也返回false. import java.util.Scanner; public class bracketsMatch { public static void main(String args[]){ Scanner input=new Scanner(System.in); String s=input.nextLine(); int a=0; int b=0; int c=0; for

华为OJ初级(一)——字符串最后一个单词的长度

/** * 功能:计算字符串最后一个单词的长度,单词以空格隔开. * 输入: 一行字符串,长度小于128. * 输出: 整数N,最后一个单词的长度. * 样例输入: hello world * 样例输出: 5 * */ 两种方法: 方法一: public int getFinalWordLen(){ String[] words= new String[128]; int len=0; int num=0; Scanner sc= new Scanner(System. in); words=s

【华为OJ】【083-计算字符串的相似度】

[华为OJ][算法总篇章] [华为OJ][083-计算字符串的相似度] [工程下载] 题目描述 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把"a"替换为"b". 2 增加一个字符,如把"abdd"变为"aebdd". 3 删除一个字符,如把"travelling"变为"traveling"

【华为OJ】【078-计算字符串的距离】

[华为OJ][算法总篇章] [华为OJ][078-计算字符串的距离] [工程下载] 题目描述 Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. Ex: 字符串A:abcdefg 字符串B: abcdef 通过增加或是删掉字符"g"的方式达到目的.

【华为OJ】【022-删除字符串中出现次数最少的字符】

[华为OJ][算法总篇章] [华为OJ][022-删除字符串中出现次数最少的字符] [工程下载] 题目描述 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 输入描述 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出描述 删除字符串中出现次数最少的字符后的字符串. 输入例子 abcdd 输出例子 dd 算法实现 import java.util.*; /** * Author:

判断输入的字符串是否是回文数

<?phpfunction yuanyincount($str){ $str_len=strlen($str); $a_count=0; $e_count=0; $i_count=0; $o_count=0; $u_count=0; $other_count=0; //五种原因字母的数组,没写输出 $a_arr=array(); $e_arr=array(); $i_arr=array(); $o_arr=array(); $u_arr=array(); $other_arr=array();

swift 判断输入的字符串是否为数字

// 判断输入的字符串是否为数字,不含其它字符 func isPurnInt(string: String) -> Bool { let scan: Scanner = Scanner(string: string) var val:Int = 0 return scan.scanInt(&val) && scan.isAtEnd }

判断输入的字符串是不是可以由子串多次重复构成

//判断输入的字符串是不是可以由子串多次重复构成 #include<iostream> #include<string> using namespace std; class Solution { public: bool repeated(string s) { int n = s.size(); string temp1 = ""; string temp2 = ""; for (int i = 2; i <= n; ++i) {