在C#

时间:2019-02-26 20:09:41

标签: c# string

首先,祝大家美好。

对不起,我的英语不好。

我有一个问题,我想编写自己的第一个程序,该程序应执行以下任务:

例如,您有以下哈希值:

9f73c507603e62c48926eb37f0f19f46

程序应将其转换为此:

“ 9”,“ c”,“ 8”,“ e”,“ d”,“ 1”,“ 5”,“ d”,“ 0”,“ b”,“ e”,“ b” ,“ e”,“ 5”,“ c”,“ 1”,“ 2”,“ 6”,“ f”,“ 2”,“ 3”,“ 3”,“ 9”,“ 5”,“ b“,” f“,” 8“,” 0“,” 4“,” 8“,” d“,” 8“

我不会不经过自己的搜索和尝试就询问,但是请记住,我还是一个初学者,我的“解决方案”是这样的:

namespace Hash_Checker
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter Your Hashsum.");
            string myhash = Console.ReadLine();
            string[] words = myhash.Split(' ');
            Console.WriteLine("Modified Hashsum:");
            foreach (var word in words)
            {

                System.Console.Write($"\"{word}\", ");
            }
            Console.ReadKey();
        }
    }
}

忽略表格的错误形式,以后我会尝试将其写得更好。

我的2个问题是:

您必须这样输入Hashsum:

9 f 7 3 c 5 0 7 6 0 3 e 6 2 c 4 8 9 2 6 e b 3 7 f 0 f 1 9 f 4 6

带有定界符,但是我希望您可以不带定界符输入它,就像这样:

9f73c507603e62c48926eb37f0f19f46

但是当您这样做时,它会在以下输出中结束:

“ 9f73c507603e62c48926eb37f0f19f46”,

第二个问题:

我的程序在最后一个数字后面加上一个“”,但我不希望这样。

示例:

应该是:

“ 9”,“ c”,“ 8”,“ e”,“ d”,“ 1”,“ 5”,“ d”,“ 0”,“ b”,“ e”,“ b” ,“ e”,“ 5”,“ c”,“ 1”,“ 2”,“ 6”,“ f”,“ 2”,“ 3”,“ 3”,“ 9”,“ 5”,“ b“,” f“,” 8“,” 0“,” 4“,” 8“,” d“,” 8“

但这是

“ 9”,“ c”,“ 8”,“ e”,“ d”,“ 1”,“ 5”,“ d”,“ 0”,“ b”,“ e”,“ b” ,“ e”,“ 5”,“ c”,“ 1”,“ 2”,“ 6”,“ f”,“ 2”,“ 3”,“ 3”,“ 9”,“ 5”,“ b“,” f“,” 8“,” 0“,” 4“,” 8“,” d“,” 8“,

最后一个,应删除。

有人给我小费或解决方案吗? 还是对初学者来说有点难?

感谢您的所有帮助!

5 个答案:

答案 0 :(得分:3)

(许多)实现此目的的一种方法是从输入中读取字符串,从字符串中选择每个字符,并使用LINQ用引号将其引起来,然后将每个字符串与string.Join()进行连接。如下:

namespace Hash_Checker
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter Your Hashsum.");
            var input = Console.ReadLine();

            //select each character from the string and turn 
            //each into a string that looks like "<character here>"
            var characters = input.Select(x => string.Format("\"{0}\"", x));

            //place comma in between each string containing "<character here>"
            var formattedString = string.Join(",", characters);

            System.Console.Write(formattedString);
            Console.ReadKey();
        }
    }
}

答案 1 :(得分:0)

我可以为您指出ToCharArray拥有的string方法。除了已经全部char而不是string以外,这已经为您提供了所需的内容。如果希望该数组为.Select(s => s.ToString()),则可以轻松地执行Linq string

所以:

var str = "12345";
var charArr = str.ToCharArray();
var strArr = charArr.Select(s => s.ToString()).ToArray();

答案 2 :(得分:0)

只需对代码进行最少的更改:

class Program
{
  static void Main(string[] args)
  {
    Console.WriteLine("Enter Your Hashsum.");
    string myhash = Console.ReadLine();
    var words = myhash.ToCharArray().Select(c => $"{c}");
    Console.WriteLine("Modified Hashsum:");
    foreach (var word in words)
    {
      System.Console.Write($"\"{word}\",");
    }

    Console.ReadKey();
  }
}

ToCharArray()为您提供了每个独立字符的char[],而Select(c => $"{c}")是将字符转换为字符串的最短方法。

我将变量类型从string[]更改为var。实际上,该类型现在是IEnumerable<string>,它对您的循环同样有效。

class Program
{
  static void Main(string[] args)
  {
    Console.WriteLine("Enter Your Hashsum.");
    var words = Console.ReadLine().ToCharArray().Select(c => $"{c}");
    Console.WriteLine("Modified Hashsum:");
    Console.Write("\"" + words.Aggregate((c, n) => $"{c}\",\"{n}") + "\"");
    Console.ReadKey();
  }
}

这样,您还将摆脱最后一个字符后的尾随,

答案 3 :(得分:0)

为什么不只是将其转到char数组?

            static void Main(string[] args)
            {
                Console.WriteLine("Enter Your Hashsum.");
                string myhash = Console.ReadLine();
                var words = myhash.ToCharArray();
                Console.WriteLine("Modified Hashsum:");
                foreach (var word in words)
                {
                    Console.Write($"\"{word}\", ");
                }
                Console.ReadKey();
            }

编辑:就像丹德(Dandre)建议的那样,这是将其转换为字符串数组的方法:

        static void Main(string[] args)
        {
            Console.WriteLine("Enter Your Hashsum.");
            string myhash = Console.ReadLine();
            var charArr = myhash.ToCharArray();
            var words = charArr.Select(s => s.ToString()).ToArray();
            Console.WriteLine("Modified Hashsum:");
            foreach (var word in words)
            {
                Console.Write($"\"{word}\", ");
            }
            Console.ReadKey();
        }

答案 4 :(得分:0)

您可以遍历字符串,因为字符串是字符数组。所以你可以这样。

namespace Hash_Checker
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter Your Hashsum.");
            string myhash = Console.ReadLine();
            //replace all spaces 
            string words = myhash.Replace(" ", "");
            Console.WriteLine("Modified Hashsum:");
            StringBuilder sb = new StringBuilder();
            //loop thru chars
            foreach (var c in words)
            {
                sb.Append($"\"{c}\", ");
            }
            //trim the comma and space at the end of string and write it to console
            Console.WriteLine(sb.ToString().TrimEnd(new char[] { ',', ' ' }));
            Console.ReadKey();
        }
    }
}