user-0 提问: 字符串文本读写操作，去掉重复3段IP

回复:
user: user-1
content: 改了一下 #include <iostream> #include <vector> #include <string> #include <regex> using namespace std;  string getMatchStr(const string strNew)  { 	std::regex reg("(\\d{1,3}).(\\d{1,3}).(\\d{1,3}).");  	regex expression(reg);  	std::smatch m;  	if (regex_search(strNew, m, reg))  	{  		return m.str(); 	} 	else 	{ 		return ""; 	} }  bool IsExsit(const string& strOld,const  string& strMatched) { 	bool bRet = false	; 	std::regex reg("(\\d{1,3}).(\\d{1,3}).(\\d{1,3}).");  	regex expression(reg);    	std::smatch m;  	if (regex_search(strOld, m, reg))  	{  		//cout << m.str() << endl;  		if(strMatched == m.str()) 		{ 			bRet = true; 		} 	}  	return bRet; } int main (void) { 	vector<string> v; 	string tempStr; 	bool bExsit = false; 	string strMatched;  	while(cin >> tempStr) 	{ 		bExsit = false; 		strMatched = getMatchStr(tempStr); 		for each(auto s in v) 		{ 			if (IsExsit(s, strMatched)) 			{ 				bExsit = true; 				break; 			} 		} 		if (!bExsit) 		{ 			v.push_back(tempStr); 		} 	} 	for each(auto s in v) 	{ 		cout << s << endl; 	} 	cin.ignore( std::numeric_limits<std::streamsize>::max( )); 	cin.clear(); 	cin.get(); 	return 0; }

user: user-1
content: #include <iostream> #include <vector> #include <string> #include <regex> using namespace std;  bool IsExsit(const string& strOld,const  string& strNew) { 	bool bRet = false	; 	std::regex reg("(\\d{1,3}).(\\d{1,3}).(\\d{1,3}).");  	regex expression(reg);   	string strMatched;  	if (strNew.length() != 0) 	{ 		std::smatch m;  		if (regex_search(strNew, m, reg))  		{  			//cout << m.str() << endl;  			strMatched = m.str(); 			if (regex_search(strOld, m, reg))  			{  				//cout << m.str() << endl;  				if(strMatched == m.str()) 				{ 					bRet = true; 				} 			}  		}  	} 	return bRet; } int main (void) { 	vector<string> v; 	string tempStr; 	bool bExsit = false; 	while(cin >> tempStr) 	{ 		bExsit = false; 		for each(auto s in v) 		{ 			if (IsExsit(s, tempStr)) 			{ 				bExsit = true; 				break; 			} 		} 		if (!bExsit) 		{ 			v.push_back(tempStr); 		} 	}  	for each(auto s in v) 	{ 		cout << s << endl; 	} 	cin.ignore( std::numeric_limits<std::streamsize>::max( )); 	cin.clear(); 	cin.get(); 	return 0; }

user: user-2
content: 用IP的前三个数建一个数组，前三个数共三个字节，共有2的24次方个值，建立一个2的24次方大小(占16MB内存)的数组，并与IP前三个数一一对应。将数组初始化为0，读入文件时将IP前三个数对应的数组中的元素的值设为1，表示此IP存在。 然后手动输入IP，判断IP前三个数对应的数组中的元素是否为1,是1表示IP已存在，是0表示IP不存在，并添加至文件末尾。 代码如下：  #include<stdio.h> char dat[1<<24]={0}; int main() { 	FILE *f = fopen("data.txt","a+"); 	if(f) 	{ 		unsigned int ip[4]; 		while(fscanf(f,"%u.%u.%u.%u",ip,ip+1,ip+2,ip+3)>0) 			dat[ip[0]<<16|ip[1]<<8|ip[2]]=1; 		scanf("%u.%u.%u.%u",ip,ip+1,ip+2,ip+3); 		if(dat[ip[0]<<16|ip[1]<<8|ip[2]]) 			puts("该IP重复。"); 		else 		{ 			fprintf(f, "%u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]); 			printf("已将%u.%u.%u.%u添加至data.txt\n", ip[0], ip[1], ip[2], ip[3]); 		} 		fclose(f); 	} 	return 0; }

user: user-3
content: //src1，src2， 输入两个字符串， len到第几个'.' //返回0， 相等， 1 不相等。 int mystrcmp(const char * src1, const char *  src2, int len) { 	int index = 0; 	if(!src1 || !src2) 		return 1; 	while(*src1++ == *src2++ && index < len) 	{ 		if(*src1 == '.') 		{ 			index++; 		} 	} 	if(index < len) 		return 1; 	else  		return 0; }  int main() { 	if(!mystrcmp("192.1.2.100", "192.168.1.0", 3)) 	{ 		cout << " == " << endl; 	} 	else 	{ 		cout << " != " << endl; 	} 	return 0; }

user: user-4
content: 把输入 ip 的最后一段去掉，然后用 hash table 或 set 判重即可。