2012-08-16 160 views
0

我有一个列表文字及其替换词,例如:C#替换字符串

服务 - >表 等

因此,可以说,如果用户写它会给结果但如果用户写与资本D它不会做任何改变。我知道如何忽略大写,但然后世界将被替换为其中是小写...我想要是大写。所以如果桌子 - >桌子和桌子 - >桌子......我怎么能做到这一点?

+2

你看过RegEx吗? – JohnnBlade 2012-08-16 05:41:13

+0

不,我没有...因此,您的意思是RegEx将解决我的问题,对吧? – Alkis 2012-08-16 05:43:56

+0

你可以做些什么来替换函数第二个电话,并与表取代,而不是无视外壳台。我有一个问题,如果原始单词是DEsk,是否应该替换为TAble?或者这仅适用于第一个字母? – Tibi 2012-08-16 05:44:06

回答

1

您可以第二次调用替换函数,第二次使用大写字母。

例如:

string result = input.Replace ("desk", "table"); 
result = result.Replace ("Desk", "Table"); 

得到一个字符串为大写的第一个字符是不是很困难。您可以使用此方法:

string lower = "desk"; 
string upper = char.ToUpper(lower[0]) + lower.Substring(1); 
0

您可以使用下面的代码,以使输入字符串转换为大写的第一个字母,

str = str.First().ToString().ToUpper() + String.Join("", str.Skip(1)); 
你的情况

现在,使用字典的数据结构来存储数据。

  1. 存储输入值作为这样的(键)桌式>表(值)

  2. 现在使用上面的代码和使第一个字母大写和存储它(桌式>表)

因此,您现在可以像desk - > table和Desk - > Table一样获取值。

这总是通过损害空间复杂度来获取时间复杂度O(1)的值。

1

你说的是你有一个单词和替换单词列表。因此,数据结构将

Dictionary<string, string> dict = new Dictionary<string, string>(); 
dict.Add("desk","table"); 
dict.Add("Desk","Table"); 

如果这是正确的,那么下面的工作

var result = dict["Desk"]; 

但如果你在下面的方式维护的值,

Dictionary<string, string> dict = new Dictionary<string, string>(); 
dict.Add("desk","table"); 

然后解决方案可能是

private void button1_Click(object sender, EventArgs e) 
    { 
     Dictionary<string, string> dict = new Dictionary<string, string>(); 
     dict.Add("desk","table"); 


     string input = "Desk"; 
     var dictValue = dict[input.ToLower()]; 
     var result = IsInitCap(input.Substring(0, 1)) 
        ? System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(dictValue) 
        : dictValue;     

    } 

    private bool IsInitCap(string str) 
    { 
     Match match = Regex.Match(str, @"^[A-Z]"); 
     return match.Success ? true : false; 
    } 

希望这可以帮助