问题 数字符

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
我不明白为什么我不能计算所选角色,请帮帮我,谢谢。
C#:
using System;
using System.Collections;

namespace ConsoleApp2karater1
{
    class Program
    {
        struct mystruct{
          public char kar;
          public int a;
        }
        static void Main(string[] args)
        {
            int[] a = new int[12];
            int i = 0;
            int j = 0;
            int k = -1;
            int hossz = 0;
            char[] tomb = new char[12];
            int[] tomb2 = new int[12];
            string str1 = "hello world!";
            mystruct[] tmb = new mystruct[12];

            hossz = str1.Length;
            for (i = 0; i < 12; i++)
            {
            for (j = 0; j < 12; j++)
            {
                    if (str1[j] == str1)
                    {
                      
                        a[j] = a[j] + 1;
                        if (a[j] < 2)
                        {
                            //k = k + 1;
                            tomb = str1;
                            tomb2 = 1;
                            k = k + tomb2;
                            //tmb.kar=str1;

                        }
                        else { }
                      

                    }
                  
                }
                Console.Write(a+" i " +i+" k "+k+" "+ tomb + " " + tomb2 + " \n");
              
            }
            k = 0;
            for (i = 0; i < 12; i++)
            {
                tomb2 = tomb2 + 1;
                Console.Write(a + " " + tomb);
                Console.Write(" " + tomb2 + "\n");
            }
                Console.WriteLine("Hello World! ");
        }
    }
}
 
最后编辑了主持人:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
将来,在发布代码时,请将它们放在代码标签中,以使我们更容易阅读您的代码。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
我认为你需要首先解释你想要完成的事情以及为什么你正在做那种达到目标的事情。

然后,请告诉我们您使用的代码呈现了哪些问题。你是收到汇编错误,如果是这样,你得到了什么错误?如果您没有获得编译错误,您是否获得运行时错误,如果是这样?如果没有,请告诉我们您看到的行为以及您期望看到的内容。
 

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
谢谢你的答案。在Tomb Char类型变量中,选择来自的所有基本字符"hello world string"然后我尝试计算它们,然后下一步我将重复计算,但是计数,第一步是故障的。我没有收到编译器错误,而是通常用于增量的计数算法以意想不到的方式递增。如果(a [j]<2)我是我选择字符的地方,并在计数中thry并获得错误的值。请帮帮我,谢谢,弗兰克。
同样在未来我将格式化代码,谢谢。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
代码甚至是否编译?第29行看起来并不合法。您无法将字符与字符串进行比较。
 

cfrank2000

活跃的成员
加入
3月6日,2021年
消息
42
编程经验
Beginner
代码甚至是否编译?第29行看起来并不合法。您无法将字符与字符串进行比较。
谢谢你的答案。我正在使用字符串来存储测试文本,也使用字符串作为数组来检查它的元素彼此。但是错误的事情,并且作为初学者,我没有看到在哪里以及如何,请帮助我。谢谢,弗兰克。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
有多种方法。让我们尝试涵盖一些方法:

方法1:假设ASCII字符(而不是C#使用的Unicode)并使用Hashtable /记分牌
这是C程序员所采取的方法。回想一下,最基本的字形在0到127的ASCII范围内。因此,您可以创建一个有128个元素的整数数组:
C#:
int [] count = new int[128];
然后,当您迭代字符串中的每个字符时,您可以击中该元素的字符数:
C#:
foreach(char ch in inputString)
{
    int asciiCode = (int) ch;
    count[asciiCode]++;
}
一旦通过输入字符串,您可以显示计数:
C#:
for(int i = 0; i <= 127; i++)
{
    char ch = (char) i;
    Console.WriteLine("The character '{0}' was seen {1} time(s)", ch, count[i]);
}
如果只想仅显示非零计数,请在显示代码中添加相应的逻辑以跳过零计数。

方法2:让Linq做所有的努力工作
This is the approach that a C# programmer who lives and breathes LINQ everyday would take. The idea here is to breakup the string into a series of characters, and take advantage of LINQ's GroupBy() method to get the unique letters and keep track of the count of each letter.
C#:
var groups = inputString.GroupBy(c => c);
foreach (var g in groups)
    Console.WriteLine("The character '{0}' was seen {1} time(s)", g.Key, g.Count());

方法3:构建一系列所看到的字符并跟踪他们的数量
这是计算机科学学生将考虑超出ASCII范围的字符的方法,并且是关于数据结构的知识,但不如CPU运行时复杂性那么关注。这希望成为您在原始代码中实施的内容。
首先声明一个包含字符和计数的类。
C#:
class CharCount
{
    public char Ch { get; set; }
    public int Count { get; set; }
}
然后声明此类对象的列表:
C#:
var list = new List<CharCount>();
Then iterate over the characters of the string. In the loop body, we'll make use of the following helper method to see if the character is already in the list. If the helper returns a CharCount object, increment the count in the object, otherwise, create a new CharCount object and insert it into the list:
C#:
CharCount charCount = FindCharCountInList(ch, list);
if (charCount == null)
    list.Add(new CharCount() { Ch = ch, Count = 1 });
else
    charCount.Count++;

帮助方法看起来像这样:
C#:
CharCount FindCharCountInList(char ch, List<CharCount> list)
{
    foreach (var item in list)
    {
        if (item.Ch == ch)
            return item;
    }
    return null;
}

最后,它只是一个迭代列表来打印字符和计数的问题:
C#:
foreach (var charCount in list)
    Console.WriteLine("The character '{0}' was seen {1} time(s)", charCount.Ch, charCount.Count);

可以使用Hashtable而不是列表,而不是消除对辅助方法的需求。但如果你要使用哈希特,那么可以全力以赴效率,导致下面的下一个方法。

方法4:构建一个看到的角色的哈希表并跟踪他们的数量
因此,这种方法将我们回复了C程序员所做的完整圈子,但考虑到C#字符串由Unicode字符组成,并删除需要声明单独类的开销。一个C#程序员更关注性能可能会通过LINQ方法采取这种方法。

因此,我们声明了一个由角色关键的简单哈希表,其值是计数:
C#:
var charCounts = new Dictionary<char, int>();
迭代字符串字符,在循环主体中,我们填充或更新哈希表元素:
C#:
if (charCounts.ContainsKey(ch))
    charCounts[ch]++;
else
    charCounts[ch] = 1;

最后,它只是一个迭代列表来打印字符和计数的问题:
C#:
foreach (var kvp in charCounts)
    Console.WriteLine("The character '{0}' was seen {1} time(s)", kvp.Key, kvp.Value);
 
最佳 底部