【发布时间】:2021-08-06 05:57:51
【问题描述】:
我正在尝试遍历字符串以查找字符、ASCII 值以及字符出现的次数。到目前为止,我已经使用 foreach 语句找到了每个唯一字符和 ASCII 值,并查找该值是否已经在列表中,然后不要添加它,否则添加它。但是我在计数部分苦苦挣扎。我在想逻辑是“如果我已经在列表中,不要再数我,但是,增加我的频率” 我尝试了一些不同的方法,例如尝试找到它找到的字符的索引并添加到该特定索引,但我迷路了。
string String = "hello my name is lauren";
char[] String1 = String.ToCharArray();
// int [] frequency = new int[String1.Length]; //array of frequency counter
int length = 0;
List<char> letters = new List<char>();
List<int> ascii = new List<int>();
List<int> frequency = new List<int>();
foreach (int ASCII in String1)
{
bool exists = ascii.Contains(ASCII);
if (exists)
{
//add to frequency at same index
//ascii.Insert(1, ascii);
//get { ASCII[index]; }
}
else
{
ascii.Add(ASCII);
//add to frequency at new index
}
}
foreach (char letter in String1)
{
bool exists = letters.Contains(letter);
if (exists)
{
//add to frequency at same index
}
else
{
letters.Add(letter);
//add to frequency at new index
}
}
length = letters.Count;
for (int j = 0; j<length; ++j)
{
Console.WriteLine($"{letters[j].ToString(),3} {"(" + ascii[j] + ")"}\t");
}
Console.ReadLine();
}
}
}
【问题讨论】:
-
LINQ 的
GroupBy是一个选项吗? -
此时任何东西都是一个选项。我的输出与每个字符、ASCII 值和频率非常接近。但是每个频率都为 0,因为该数组中没有添加任何内容
-
如果您不介意性能下降,您可以使用
string.Replace(charYourLookingFor,Char.MinValue)并比较它们的长度以获取该字符在字符串中出现的次数。 -
@DekuDesu 如果字符是 Char.MinValue 怎么办?
-
如果需要找到字符
'\0',则可以使用string.Replace($"{charYourLookingFor}","")