используйте:
`#define sgn(x) (x<0)`
, например:
`if(sng(n)) { etc ....}`
Или, возможно, вы захотите использовать какой-то сложный код, но сначала выполните приведение:
inline bool sgn_long(long x)
{
return ((x<0)? true: false);
}
Нет, не существует "внутреннего" способа узнать, что (например) zap.co.it
является субдоменом (потому что регистратор в Италии ВСЕГДА продает такие домены, как ] co.it
), а zap.co.uk
не является (поскольку регистратор в Великобритании НЕ продает такие домены, как co.uk
, а только например zap.co.uk
).
Вам просто нужно будет использовать вспомогательную таблицу (или онлайн-источник), чтобы сообщить вам, какие TLD ведут себя особенно похоже на британские и австралийские - нет никакого способа предугадать это от простого взгляда на строку без таких дополнительных семантических знаний (конечно, со временем это может измениться, но если вы найдете хороший онлайн-источник, этот источник также изменится соответственно, можно надеяться! -).
Существует много-много TLD. Вот список:
http://data.iana.org/TLD/tlds-alpha-by-domain.txt
Вот еще один список
http://en.wikipedia.org/wiki/List_of_Internet_top -level_domains
Вот еще один список
Использование этого файла эффективных TLD , который кто-то другой нашел на веб-сайте Mozilla:
from __future__ import with_statement
from urlparse import urlparse
# load tlds, ignore comments and empty lines:
with open("effective_tld_names.dat.txt") as tld_file:
tlds = [line.strip() for line in tld_file if line[0] not in "/\n"]
def get_domain(url, tlds):
url_elements = urlparse(url)[1].split('.')
# url_elements = ["abcde","co","uk"]
for i in range(-len(url_elements), 0):
last_i_elements = url_elements[i:]
# i=-3: ["abcde","co","uk"]
# i=-2: ["co","uk"]
# i=-1: ["uk"] etc
candidate = ".".join(last_i_elements) # abcde.co.uk, co.uk, uk
wildcard_candidate = ".".join(["*"] + last_i_elements[1:]) # *.co.uk, *.uk, *
exception_candidate = "!" + candidate
# match tlds:
if (exception_candidate in tlds):
return ".".join(url_elements[i:])
if (candidate in tlds or wildcard_candidate in tlds):
return ".".join(url_elements[i-1:])
# returns "abcde.co.uk"
raise ValueError("Domain not in global list of TLDs")
print get_domain("http://abcde.co.uk", tlds)
дает:
abcde.co.uk
Я был бы признателен если кто-нибудь дадут мне знать, какие части из вышеперечисленного можно переписать более питоническим способом. Например, должен быть лучший способ перебора списка last_i_elements
, но я не мог его придумать. Я также не знаю, лучше ли поднимать ValueError
. Комментарии?