我正在创建一个简单的程序,它将访问用户选择的网站,所以我使用if语句,如:
If (url == "http://")
{
cout << ("Connecting to ") << url;
}
else
{
cout << ("Invalid URL");
}
我想知道如何过滤出不以“http://”或“https://”开头的字符串,我刚刚开始这样的帮助将会受到赞赏。
答案 0 :(得分:1)
明确但不是特别快的方法是使用(假设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
&amp; c。所以你不要硬编码长度,但这可能会走得太远。
为了更加普遍,你可以冒险进入正则表达式的阴暗世界。请参阅std::regex
。
答案 1 :(得分:1)
一个可能的选择是将已知的起始协议存储到字符串向量中,然后使用该向量及其函数以及字符串函数来进行测试,如果您的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协议容器。这样,该函数将搜索保存在字符串向量中的所有字符串。