zoukankan      html  css  js  c++  java
  • <FZU1033>URLs

    URLs
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    Description

    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>
    
    
    //Memory: 228 KB		Time: 0 MS
    //Language: GNU C++		Result: Accepted
    
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    int main()
    {
        char s[61];
        int n, i;
        scanf("%d", &n);
        for(int ca=1; n--; ca++)
        {
            i = 0;
            scanf("%s", s);//puts(s);
            printf("URL #%d\n", ca);
            if(s[i] == 'h')
            {
                puts("Protocol = http");
                i+=7;
            }
            else if(s[i] == 'f')
            {
                puts("Protocol = ftp");
                i+=6;
            }
            else
            {//cout<<s[i];
                puts("Protocol = gopher");
                i+=9;
            }
            printf("Host     = ");
            for(; s[i] != '\0' && s[i] != ':' && s[i] != '/'; i++)
            {
                putchar(s[i]);
            }
            puts("");
            if(s[i] != ':')
                puts("Port     = <default>");
            else
            {
                printf("Port     = ");
                for(i++; s[i] != '\0' && s[i] != '/'; i++)
                {
                    putchar(s[i]);
                }
                puts("");
            }
            if(s[i] != '/')
                puts("Path     = <default>");
            else
            {
                printf("Path     = ");
                for(i++; s[i] != '\0'; i++)
                {
                    putchar(s[i]);
                }
                puts("");
            }
            puts("");
        }
        return 0;
    }


  • 相关阅读:
    python的模块future用法实例解析
    strcmp函数和memcmp函数的用法区别及联系
    esp8266 smartconfig-智能配网分析和使用及注意事项
    ubuntu 18.04 安装并配置adb
    Markdown的常用方法总结
    mac下使用minicom几个注意事项
    最强Linux shell工具Oh My Zsh 指南
    ESP8266源码分析--打印的基本用法
    atom 在Ubuntu 18.04 上安装及基本使用
    ubuntu 查看端口被占用并删除端口
  • 原文地址:https://www.cnblogs.com/cszlg/p/2910582.html
Copyright © 2011-2022 走看看