2010-03-30 49 views
3

我有兩個網址。我想要合併的服務器和相關網址。問題是部分網址可能會重疊。我已經使用了一些可怕的字符串操作來完成這個工作,但是想把它放在那裏,看看是否有一個乾淨利落的方法。在C中結合重疊的網址#

string siteUrl = "http://seed-dev6/sites/irs"; 
string formUrl = "/sites/irs/Forms/testform.xsn"; 

回答

3

我會分裂根據他們的路徑分隔符/的URL,合併名單沒有重複,同時維持秩序,然後將它們連接成一個單一的URL字符串。

這可以避免瘋狂的字符串操作和搜索你需要做的。唯一複雜的因素是使得代碼能夠處理不同的情況(高與低)以及網絡轉義碼%20等。

+0

我已經走了你的方法,它不是完美的,但它足夠滿足我需要的東西,並且實現起來更快。 – 2010-03-31 16:16:00

2

Knuth-Morris-Pratt算法的這種描述討論了用於找出兩個詞的重疊的算法。事實上,他們甚至提供了一種算法:

overlap[0] = -1; 
for (int i = 0; pattern[i] != '\0'; i++) { 
overlap[i + 1] = overlap[i] + 1; 
while (overlap[i + 1] > 0 && 
     pattern[i] != pattern[overlap[i + 1] - 1]) 
    overlap[i + 1] = overlap[overlap[i + 1] - 1] + 1; 
} 
return overlap; 

你將不得不編寫自己的C#,但是這(與文章一起)將是一個良好的開端。

0
string siteUrl = "http://seed-dev6/sites/irs"; 
    string formUrl = "/sites/irs/Forms/testform.xsn"; 

    string result = siteUrl + formUrl; 
    for (int n = 1; n < formUrl.Length; ++n) 
    { 
     if (siteUrl.EndsWith(formUrl.Substring(0, n))) 
      result = siteUrl + formUrl.Substring(n); 
    } 

    return result; 
0

這應該可以做到。也可能使用Path.DirectorySeparatorChar而不是'/'。

char delim = '/'; 
string siteUrl = "http://seed-dev6/sites/irs"; 
string formUrl = "/sites/irs/Forms/testform.xsn"; 
string fullUrl = string.Join(
    new string(delim,1), 
    siteUrl.Split(delim).Concat(formUrl.Split(delim)).Distinct().ToArray());