ZOJ1243 URLs【文本处理】

URLs

Time Limit: 2 Seconds        Memory Limit: 65536 KB

In the early nineties, the World Wide Web (WWW) was invented. Nowadays, most people think that the WWW simply consists of all the pretty (or not so pretty) HTML-pages that you can read with your WWW browser. But back then, one of the main intentions behind the design of the WWW was to unify several existing communication protocols.

Then (and even now), information on the Internet was available via a multitude of channels: FTP, HTTP, E-Mail, News, Gopher, and many more. Thanks to the WWW, all these services can now be uniformly addressed via URLs (Uniform Resource Locators). The syntax of URLs is defined in the Internet standard RFC 1738. For our problem, we consider a simplified version of the syntax, which is as follows:

<protocol> "://" <host> [ ":" <port> ] [ "/" <path> ]

The square brackets [] mean that the enclosed string is optional and may or may not appear. Examples of URLs are the following:

http://www.informatik.uni-ulm.de/acm
ftp://acm.baylor.edu:1234/pub/staff/mr-p
gopher://veryold.edu

More specifically,

<protocol> is always one of http, ftp or gopher.

<host> is a string consisting of alphabetic (a-z, A-Z) or numeric (0-9) characters and points (.).

<port> is a positive integer, smaller than 65536.

<path> is a string that contains no spaces.

You are to write a program that parses an URL into its components.


Input

The input starts with a line containing a single integer n, the number of URLs in the input. The following n lines contain one URL each, in the format described above. The URLs will consist of at most 60 characters each.


Output

For each URL in the input first print the number of the URL, as shown in the sample output. Then print four lines, stating the protocol, host, port and path specified by the URL. If the port and/or path are not given in the URL, print the string <default> instead. Adhere to the format shown in the sample output.

Print a blank line after each test case.


Sample Input

3
ftp://acm.baylor.edu:1234/pub/staff/mr-p
http://www.informatik.uni-ulm.de/acm
gopher://veryold.edu


Sample Output

URL #1
Protocol = ftp
Host     = acm.baylor.edu
Port     = 1234
Path     = pub/staff/mr-p

URL #2
Protocol = http
Host     = www.informatik.uni-ulm.de
Port     = <default>
Path     = acm

URL #3
Protocol = gopher
Host     = veryold.edu
Port     = <default>
Path     = <default>


Source:  Southwestern Europe 1997, Practice


问题链接ZOJ1243 URLs

问题简述:(略)

问题分析

  这是一个文本处理问题,用C++的string类的方法实现相对比较简单。

  这个问题的关键是字符串切割,也可以C语言的库函数strtok()来实现,复杂程度基本上差不多。

程序说明:(略)

题记:(略)


参考链接:(略)


AC的C++语言程序如下
/* ZOJ1243 URLs */

#include <iostream>
#include <string>
#include <ctype.h>

using namespace std;

int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        string url, protocol, host, port, path;

        cin >> url;
        int pos = url.find("://");
        protocol = url.substr(0, pos);
        host = url.substr(pos + 3, url.size());
        pos = host.find('/');
        if(pos != (int)string::npos) {
            path = host.substr(pos + 1, host.size());
            host = host.substr(0, pos);
        } else
            path = "<default>";

        pos = host.find(':');
        if(pos != (int)string::npos) {
            for(int j = pos + 1; isdigit(host[j]); j++)
                port += host[j];
            host = host.substr(0, pos);
        } else
            port = "<default>";

        cout << "URL #" << i << endl;
        cout << "Protocol = " << protocol << endl;
        cout << "Host     = " << host << endl;
        cout << "Port     = " << port << endl;
        cout << "Path     = " << path << endl;
        cout << endl;
     }

    return 0;
}





猜你喜欢

转载自blog.csdn.net/tigerisland45/article/details/80722410