Vb.net 如何打印每个字母在字符串中出现的次数?
我的任务是编写一个程序,从文本框中提取一个字符串,并打印每个字母在字符串中出现的次数。请注意,这是在简单的代码 下面是我的代码,但我的问题是它不能忽略已打印的字符。e、 g.如果字符串是“aaaaa”,它必须只打印一行,表示“a出现5次”,而不是5行,表示相同的内容Vb.net 如何打印每个字母在字符串中出现的次数?,vb.net,Vb.net,我的任务是编写一个程序,从文本框中提取一个字符串,并打印每个字母在字符串中出现的次数。请注意,这是在简单的代码 下面是我的代码,但我的问题是它不能忽略已打印的字符。e、 g.如果字符串是“aaaaa”,它必须只打印一行,表示“a出现5次”,而不是5行,表示相同的内容 Dim str As String = TextBox1.Text Dim tempStr As String Dim a, c, k As Integer For k = 1 To Len(str) tempStr =
Dim str As String = TextBox1.Text
Dim tempStr As String
Dim a, c, k As Integer
For k = 1 To Len(str)
tempStr = Mid(str, k, 1)
c = 0
For a = 1 To Len(str)
If Mid(str, a, 1) = tempStr Then
c += 1
End If
Next
Console.WriteLine(tempStr & " appears " & c & " times.")
Next
您有两个循环:外部循环用于选择字母;以及一个内部循环,用于测试字母在文本框字符串中出现的次数 您的问题是外部循环也在从字符串本身选择其字母。这样,字符串中的任何重复字母都意味着重复输出 相反,您应该从整套符号中选择字母-通常是
'
到'~'
。但是你必须为那些根本没有出现的符号添加额外的代码:如果计数为零,就不要打印任何东西
请注意,这并不是一种非常有效的方法—您正在多次扫描文本框字符串—但它肯定足够快。您有两个循环:外部循环用于选择字母;以及一个内部循环,用于测试字母在文本框字符串中出现的次数 您的问题是外部循环也在从字符串本身选择其字母。这样,字符串中的任何重复字母都意味着重复输出 相反,您应该从整套符号中选择字母-通常是
'
到'~'
。但是你必须为那些根本没有出现的符号添加额外的代码:如果计数为零,就不要打印任何东西
请注意,这不是一种非常有效的方法-您正在多次扫描文本框字符串-但速度肯定足够快。更新以解决您的评论:
代码的问题是,您没有任何东西可以跟踪哪些字母已被计数和打印,这样它们就不会再次被计数
要跟踪所使用的字母,可以使用列表(字符)
或使用字典库解决方案,如下图所示。但是,既然你说你不能使用列表或字典,这里有一个解决办法:只在字母不存在于字符串的其余部分(在外循环中)时计算(并打印)字母。这样,您可以保证重复的部分将被忽略
下面的示例使用了两个与代码类似的嵌套循环:
For i = 0 To str.Length - 1
Dim currentLetter As Char = str(i)
'Dim currentLetter As String = str.Substring(i, 1) ' If you don't want to use Char.
' If the letter exists in the rest of the string, ignore it and continue.
If str.Substring(i + 1).Contains(currentLetter) Then Continue For
Dim count As Integer = 0
For j = 0 To str.Length - 1
If str(j) = currentLetter Then count += 1
'If str.Substring(j, 1) = currentLetter Then count += 1 ' If you don't like Char.
Next
Console.WriteLine("The letter {0} appears {1} times in the string.",
currentLetter, count)
Next
一些评论:
For Each c As Char In str
dictLetters(c) = If(dictLetters.ContainsKey(c), dictLetters(c), 0) + 1
Next
- 不建议使用
。相反,如果只需要一个字符,可以使用Mid()
str(index)
- 类似地,
也是为了向后兼容而存在的。相反,您应该使用Len()
str.Length
原始答复: 使用a跟踪字母的计数,然后显示计数:
Dim str As String = TextBox1.Text
Dim dictLetters As New Dictionary(Of Char, Integer)
For Each c As Char In str
If dictLetters.ContainsKey(c) Then
dictLetters(c) += 1
Else
dictLetters(c) = 1
End If
Next
For Each pair In dictLetters
Console.WriteLine("The letter {0} appears {1} times in the string.",
pair.Key, pair.Value).
Next
较短版本:
For Each c As Char In str
dictLetters(c) = If(dictLetters.ContainsKey(c), dictLetters(c), 0) + 1
Next
更新以回应您的评论:
代码的问题是,您没有任何东西可以跟踪哪些字母已被计数和打印,这样它们就不会再次被计数
要跟踪所使用的字母,可以使用列表(字符)
或使用字典库解决方案,如下图所示。但是,既然你说你不能使用列表或字典,这里有一个解决办法:只在字母不存在于字符串的其余部分(在外循环中)时计算(并打印)字母。这样,您可以保证重复的部分将被忽略
下面的示例使用了两个与代码类似的嵌套循环:
For i = 0 To str.Length - 1
Dim currentLetter As Char = str(i)
'Dim currentLetter As String = str.Substring(i, 1) ' If you don't want to use Char.
' If the letter exists in the rest of the string, ignore it and continue.
If str.Substring(i + 1).Contains(currentLetter) Then Continue For
Dim count As Integer = 0
For j = 0 To str.Length - 1
If str(j) = currentLetter Then count += 1
'If str.Substring(j, 1) = currentLetter Then count += 1 ' If you don't like Char.
Next
Console.WriteLine("The letter {0} appears {1} times in the string.",
currentLetter, count)
Next
一些评论:
For Each c As Char In str
dictLetters(c) = If(dictLetters.ContainsKey(c), dictLetters(c), 0) + 1
Next
- 不建议使用
。相反,如果只需要一个字符,可以使用Mid()
str(index)
- 类似地,
也是为了向后兼容而存在的。相反,您应该使用Len()
str.Length
原始答复: 使用a跟踪字母的计数,然后显示计数:
Dim str As String = TextBox1.Text
Dim dictLetters As New Dictionary(Of Char, Integer)
For Each c As Char In str
If dictLetters.ContainsKey(c) Then
dictLetters(c) += 1
Else
dictLetters(c) = 1
End If
Next
For Each pair In dictLetters
Console.WriteLine("The letter {0} appears {1} times in the string.",
pair.Key, pair.Value).
Next
较短版本:
For Each c As Char In str
dictLetters(c) = If(dictLetters.ContainsKey(c), dictLetters(c), 0) + 1
Next
看不出有什么问题。您的代码正按照您的要求执行。尝试单步遍历代码,看看它实际上在做什么。然后尝试几个不同的测试用例——这会让你更清楚。我理解我的代码在做什么,问题说明了一切。我的帖子要求帮助代码完成需要完成的事情,而不是我让代码完成的事情。发布我的代码是为了展示我在VB中的知识水平所做的努力,而不是说这是一个完整的解决方案看不到问题。您的代码正按照您的要求执行。尝试单步遍历代码,看看它实际上在做什么。然后尝试几个不同的测试用例——这会让你更清楚。我理解我的代码在做什么,问题说明了一切。我的帖子要求帮助代码完成需要完成的事情,而不是我让代码完成的事情。发布我的代码是为了展示我在VB方面的知识水平,并不是说它是完整的解决方案。感谢您编写的代码。然而,我的任务是在不使用预定义词汇的情况下完成,因为我们还没有被教过。VB.NET中只有donr循环和嵌套循环。如果我将代码复制到一个新按钮,下面的一行会给出一个错误:
Console.WriteLine($“字母{pair.Key}在字符串中出现{pair.Value}次。”)–
字符$被认为不是valid@BlessingHwacha如果字符$
无法识别,那么您使用的是旧的VB版本。您可以将其替换为Console.WriteLine(“字母{0}在字符串中出现{1}次。”,pair.Key,pair.Value)