(说明:此代码只作为参考,并非绝对的正确代码,但是保证AC)
题目:寻找域名
描述
统一资源定位符(Uniform Resource Locator,缩写为URL)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
典型的URL语法应该如下:
scheme://domain:port/path?query_string#fragment_id
在这个问题中模式/协议(scheme)和域名(domain)是必须的其他都是可选的。
例如下面包含一些正确的URL:
http://dict.bing.com.cn/#%E5%B0%8F%E6%95%B0%E7%82%B9
http://www.mariowiki.com/Mushroom
https://mail.google.com/mail/?shva=1#inbox
http://en.wikipedia.org/wiki/Bowser_(character)
http://fync.acmclub.com/
ftp://222.207.30.4/
http://www.int255.com:8080/bbs/
现在你的任务是从给定的URL中找出域名。
输入描述
输入整数T,接下来包含T组测试用例,每个URL各占一行(测试数据不超过10组,每组数据不超过200个字符),请读到文件末尾。
输出描述
对于每组测试用例,你应该输出给定URL中的域名,每个输出各占一行。
参考代码:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
string getDomain(const string& url) {
string domain;
size_t protocolPos = url.find("://");
if (protocolPos != string::npos) {
domain = url.substr(protocolPos + 3);
} else {
domain = url;
}
size_t pathPos = domain.find('/');
if (pathPos != string::npos) {
domain = domain.substr(0, pathPos);
}
return domain;
}
int main() {
int T;
cin >> T;
cin.ignore();
vector<string> urls;
string url;
while (T-- > 0 && getline(std::cin, url)) {
urls.push_back(url);
}
for (const string& u : urls) {
string domain = getDomain(u);
cout << domain << endl;
}
return 0;
}
代码解释:
头文件
#include <iostream>
:用于标准输入输出流(如cin
和cout
)。#include <string>
:用于处理字符串。#include <sstream>
:虽然在本代码示例中没有直接使用到,但通常用于字符串流操作。#include <vector>
:用于创建动态数组。
命名空间
using namespace std;
:这样可以在代码中省略std::
前缀,直接使用cin
,cout
等。
函数定义
string getDomain(const string& url)
:这个函数接收一个URL作为参数,然后返回该URL的域名部分。- 首先尝试找到协议部分(例如
http://
或https://
)。如果找到了,则从其后开始截取URL。 - 如果找不到协议部分,则假设整个字符串都是URL。
- 然后查找第一个斜杠
/
的位置来确定路径开始的地方,并将域名截取至该位置之前。
- 首先尝试找到协议部分(例如
主函数
int main()
:程序的入口点。- 定义变量
T
来存储用户要输入的URL数量。 - 使用
cin >> T;
读取这个数字。 - 调用
cin.ignore();
忽略缓冲区中的换行符。 - 创建一个
vector<string> urls;
来保存所有的URL。 - 使用循环读取每个URL并添加到
urls
向量中。 - 对于每一个存储在
urls
中的URL,调用getDomain(u)
获取其域名,并通过cout
将其输出。
- 定义变量