我創建將要訪問的用戶選擇這樣的一個網站,我用一個簡單的程序的if語句,如:如何在if語句中使用*通配符?
If (url == "http://")
{
cout << ("Connecting to ") << url;
}
else
{
cout << ("Invalid URL");
}
我想知道我怎麼能過濾掉沒有按串不要以「http://」或「https://」開頭,我剛開始時會很感激。
我創建將要訪問的用戶選擇這樣的一個網站,我用一個簡單的程序的if語句,如:如何在if語句中使用*通配符?
If (url == "http://")
{
cout << ("Connecting to ") << url;
}
else
{
cout << ("Invalid URL");
}
我想知道我怎麼能過濾掉沒有按串不要以「http://」或「https://」開頭,我剛開始時會很感激。
一個明確的,但也不是特別快的方式,是使用(假設url
是std::string
)
if (url.substr(0, 7) != "http://" && url.substr(0, 8) != "https://"){
/*I don't start with http:// or https:// */
}
這裏我使用substr
提取std::string
然後使用重載!=
操作開始。
請注意,如果url
短於7個或8個字符,則行爲仍然是明確定義的。
您可以定義static const char HTTP[] = "http://"
並使用sizeof(HTTP) - 1
& c。所以你不要硬編碼長度,但這可能會走得太遠。
爲了更一般性,您可以冒險進入正則表達式的模糊世界。請參閱std::regex
。
一個可能的選擇是將已知的啓動協議存儲到一個字符串向量中,然後使用該向量及其函數以及字符串函數執行測試,並且如果您的url是字符串對象,則比較容易。
#include <string>
#include <vector>
int main {
const std::vector<std::string> urlLookUps { "http://", "https://" };
std::string url("https://www.home.com");
unsigned int size1 = urlLookUps[0].size();
unsigned int size2 = urlLookUps[1].size();
if (url.compare(0, size1, urlLookUps[0]) == 0 ||
url.compare(0, size2, urlLookUps[1]) == 0) {
std::cout << url << std::endl;
} else {
std::cout << "Invalid Address" << std::endl;
}
return 0;
}
編輯
您可以藉此下一步,把它變成一個簡單的功能
#include <string>
#include <vector>
void testUrls(const std::string& url, const std::vector<std::string>& urlLookUps) {
std::vector<unsigned int> sizes;
for (unsigned int idx = 0; idx < urlLookUps.size(); ++idx) {
sizes.push_back(urlLookUps[idx].size());
}
bool foundIt = false;
for (unsigned int idx = 0; idx < urlLookUps.size(); ++idx) {
if (url.compare(0, sizes[idx], urlLookUps[idx]) == 0) {
foundIt = true;
break;
}
}
if (foundIt) {
std::cout << url << std::endl;
} else {
std::cout << "Invalid URL" << std::endl;
}
} // testUrls
int main() {
const std::vector<std::string> urlLookUps { "http://", "https://" };
std::string url1("http://www.home.com");
std::string url2("https://www.home.com");
std::string url3("htt://www.home.com");
testUrl(url1, urlLookUps);
testUrl(url2, urlLookUps);
testUrl(url3, urlLookUps);
return 0;
} // main
這樣你就可以同時通過URL的功能以及一個用戶可能想要自己填充的url協議容器。這樣該函數將搜索保存到字符串向量中的所有字符串。
使用'find'並檢查它是否返回0. – NathanOliver
@NathanOliver,但匹配像'otherstuffhttp:// otherstuff'的東西 – Max
http://stackoverflow.com/questions/1878001/how-do-i -check-if-ac-string-starts-with-a-certain-string-and-convert -a-sub – Max