我正在尝试为文本文件中找到的每个字符增加数组,但是当我尝试使用+1,+ =或++递增数组时,出现一条消息,提示“运算符'+ +'不适用于'CharacterFrequency'类型的操作数。”我也不能为此使用int []。
提前感谢您提供的任何指导。
string s = File.ReadAllText("wap.txt");
CharacterFrequency[] count = new CharacterFrequency[(int)char.MaxValue];
foreach (char t in s)
{
count[t]++;
}
预期结果将是数组保留文本文件中每个唯一字符的出现。例如count[] = {A, a, B, c }
。
我的CharacterFrequency类:
class CharacterFrequency
{
public int Frequency { get; set; }
public char Char { get; set; }
public override string ToString()
{
return $"Character: {Char} Frequency: {Frequency}";
}
答案 0 :(得分:4)
很明显,您的问题是您需要添加频率参考:
count[t].Frequency++;
但是,由于这是学术性的并且很无聊,因此您也可以使用linq完成此操作
优点,您在该文件中只有一个字符列表,并且效率仍然很高
var count = File.ReadAllText("wap.txt")
.ToCharArray()
.GroupBy(x => x)
.Select(x => new CharacterFrequency() { Char = x.Key, Frequency = x.Count() })
.ToArray();
foreach (var item in count)
Console.WriteLine($"{item.Char} {item.Frequency}");
或
var dict = File.ReadAllText("wap.txt")
.ToCharArray()
.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
foreach (var item in dict )
Console.WriteLine($"{item.Key} {item.Value}");
其他资源
打开一个文本文件,将文件中的所有文本读取为字符串,然后 然后关闭文件。
将此实例中的字符复制到Unicode字符数组。
对序列的元素进行分组。
Enumerable.ToArray(IEnumerable) Method
从IEnumerable创建数组。
Enumerable.ToDictionary Method
从IEnumerable创建字典。
$ - string interpolation (C# Reference)
$特殊字符将字符串文字标识为插值 串。插值字符串是可能包含以下内容的字符串文字 插值表达式。当插值字符串解析为 结果字符串,带有插值表达式的项目将替换为 表达式结果的字符串表示形式。
答案 1 :(得分:0)
您可以简单地做到这一点:
string s = File.ReadAllText("wap.txt");
int[] count = new int[(int)char.MaxValue];
foreach (char t in s)
{
count[t]++; // or count[(int)t] ++;
}
更新的代码:
您可以像这样声明对象的数组:
CharacterFrequency[] count = new CharacterFrequency[(int)char.MaxValue];
for (int i=0;i < count.Length; i++)
{ count[i] = new CharacterFrequency();}
然后您可以执行以下操作:
foreach (char t in s)
{
count[t].Frequency ++;
}
最终代码。一共有128个ASCII字符:
CharacterFrequency[] count = new CharacterFrequency[128];
for (int i=0;i < count.Length; i++)
{ count[i] = new CharacterFrequency();}
foreach (char t in s)
{
if (count[t].Char == '\0')
{
count[t].Char = t;
count[t].Frequency = 1;
}
else count[t].Frequency++;
}
答案 2 :(得分:0)
您需要访问并增加if(isset($check)){
$client = $_POST['client'];
$project = $_POST['project'];
$kit_no = $_POST['kit_no']; //array
$kit_desc = $_POST['kit_desc']; //array
for($i=0;$i<sizeof($check);$i++){
for($i=0;$i<sizeof($kit_no);$i++){
for($i=0;$i<sizeof($kit_desc);$i++){
$query=mysqli_query($con,"INSERT INTO tbltrainsets_kit(id, client, project, kit_no, kit_desc)VALUES(
'',
'".$client."',
'".$project."',
'".$kit_no[$i]."',
'".$kit_desc[$i]."'
)")or die(mysqli_error($con));
}
}
}
}
属性:
Frequency
请注意,目前您有一个count[t].Frequency++;
值数组,因此在尝试上述代码之前,应依次初始化每个项目,否则将获得null
。
NullReferenceException
将实例化第一项。