显然拉丁字母表确实如此.但我在概念意义上,跨语言和Unicode规范问这个问题.
实际上,这是为了比较两个字符串.如果您已经知道它们在所有语言中的字节数不同 - 您是否可以认为这足以保证它们不是同一字符串的不同"套管"版本?
我试图创建一个方法来查找字符串中重复字符的数量.因此,例如,DuplicateCount("aabbcde")将返回2并且DuplicateCount("aabBcde")还将返回2.我首先想到创建此方法是将整个字符串转换为小写,然后根据其ASCII值计算字符出现的次数.所以这是我的代码:
public static int DuplicateCount(string str)
{
int[] buffer = new int[128]; //128 possible ASCII characters
string lower = str.ToLower();
int dups = 0;
for (int i = 0; i < str.Length; i++)
{
int num = (int)str[i];
buffer[num]++; //increase
if (buffer[num] == 2)
{
dups++;
}
}
return dups;
}
Run Code Online (Sandbox Code Playgroud)
当字符串包含大写字符时,此方法将不起作用.此方法不起作用的原因是因为str.ToLower()调用不会更改字符的ASCII值,即使字符串本身更改为全部小写.有谁知道为什么会这样?你会怎么解决它?