1.确定一个字符串每个字符都是独一无二的

//Implement an algorithm to determine if a string has all unique characters What if 
//you can not use additional data structures?
#include <iostream>
#include <string>
using namespace std;
//适合所有ascii字符

bool uniquechar1(string & s)
{
	bool a[256]={0};//ascii为256个
	int temp;
	for (auto i =0;i<s.size();i++)
	{
		temp=s[i];
		if(a[temp]) return false;
		a[temp] =true;
	}
	return true;
}
//只适合全为字母的字符串
bool uniquechar2(string & s)
{
	int temp;
	int val =0;
	for (auto i =0;i<s.size();i++)
	{
		temp=s[i]-'a';
		if((val&(1<<temp))>0) return false;
		val |=(1<<temp);
	}
	return true;
}


void main()
{
	string b;
	std::cin>>b;
	std::cout<<uniquechar1(b)<<" "<<uniquechar2(b);
	system("pause");
}

### 回答1: 互联网上每台计算机都有一个独一无二的编号,称为IP地址,每个合法的IP地址由“.”分隔开4个数字组成,每个数字的取值范围是0-255。现在用户输入一个字符串s,请判断s是否为合法IP,若是,则输出“y”。 ### 回答2: 若不是,输出“n”。 首先,我们可以把输入的字符串s按照“.”进行分割,得到digit数组,其长度必须为4,否则该ip地址不合法。之后,我们需要对每个数字进行判断,判断其是否在0-255之间,如果不在,则该ip地址不合法。最后,如果digit数组中的所有数字都符合要求,则该ip地址为合法ip地址,输出“y”,否则输出“n”。 具体实现可以参考以下代码: ``` #include <iostream> #include <string> #include <vector> using namespace std; vector<string> split(const string& s, char delimiter) { vector<string> tokens; string token; size_t start = 0, end = 0; while ((end = s.find(delimiter, start)) != string::npos) { token = s.substr(start, end - start); if (!token.empty()) tokens.push_back(token); start = end + 1; } token = s.substr(start); if (!token.empty()) tokens.push_back(token); return tokens; } bool is_valid_ip(const string& s) { vector<string> digit = split(s, '.'); if (digit.size() != 4) return false; for (const string& d : digit) { if (d.empty() || d.size() > 3) return false; for (char c : d) if (!isdigit(c)) return false; int num = stoi(d); if (num < 0 || num > 255) return false; } return true; } int main() { string s; cin >> s; if (is_valid_ip(s)) cout << "y" << endl; else cout << "n" << endl; return 0; } ``` 该代码中,函数split可以将一个字符串按照指定的分隔符delimiter进行分割,返回一个vector,每个元素是一个切分出来的子串。is_valid_ip函数判断输入的字符串是否为合法ip地址,其中使用了函数split进行字符串分割,并对每个数字进行范围判断。在主函数中,从标准输入读入s,并调用is_valid_ip进行判断,输出结果。 ### 回答3: 如果不是合法ip地址,输出“n”。 要判断一个字符串s是否为合法的ip地址,需要先将字符串进行解析,拆分成4个数字,然后判断每个数字是否在0-255的范围内,并且不能有前导0(除了0本身)。 下面给出具体的代码实现: ``` #include <iostream> #include <string> #include <vector> using namespace std; // 判断一个字符串是否是合法的ip地址 bool is_valid_ip(string s) { vector<int> nums; int num = 0, cnt = 0; for (char c : s) { if (c < '0' || c > '9') { // 非数字字符 return false; } num = num * 10 + (c - '0'); if (num > 255 || cnt > 3) { // 数字越界或分隔符数量超过3个 return false; } if (num == 0 && cnt > 0) { // 有前导0 return false; } if (c == '.') { nums.push_back(num); num = 0; cnt++; } } if (cnt != 3) { // 分隔符数量不足3个 return false; } nums.push_back(num); return true; } int main() { string s = "192.168.1.1"; if (is_valid_ip(s)) { cout << "y"; } else { cout << "n"; } return 0; } ``` 首先定义一个能够判断字符串是否是合法ip地址的函数 `is_valid_ip`,该函数接收一个字符串作为参数,返回一个布尔值。 函数内部首先定义一个向量 `nums`,它用于存储解析后的4个数字。然后定义两个变量 `num` 和 `cnt`,分别表示当前数字和分隔符数量。 接下来遍历字符串中的每个字符,如果是非数字字符,则说明字符串不合法,返回 `false`。如果是数字字符,则更新当前数字,如果数字越界或者分隔符数量超过3个,则说明字符串不合法,返回 `false`。如果当前数字是0且不是第一个数字,则说明有前导0,字符串不合法,返回 `false`。如果当前字符是分隔符,则将当前数字加入到向量 `nums` 中,重置当前数字和分隔符数量。 最后,如果分隔符数量不足3个,则说明字符串不合法,返回 `false`。否则将最后一个数字加入到向量 `nums` 中,返回 `true`。 在主函数中,给定一个测试用例,如果该字符串是合法ip地址,则输出 `y`,否则输出 `n`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值