char到字符串的字符串

时间:2014-01-31 12:36:42

标签: c# string

我想创建一个程序,它接受你输入的字符串并将其转换为不同的字符串,所以如果我输入"Hello World",每个字符串将变成一个字符串,控制台将输出类似{{1每个"Alpha Beta Gamma Gamma Zeta Foxtrot Dona Rama Lana Zema" char

我尝试这样做:

word

但我无法让它发挥作用。 任何人都可以给我一个提示或指出我正确的方向吗?

7 个答案:

答案 0 :(得分:5)

您需要的是Dictionary<char,string>

var words = new Dictionary<char, string>();
words.Add('a', "Alpha");
words.Add('b',"Beta");
...
string input = Console.ReadLine();
string[] contents = new string[input.Length];
for (int i = 0; i < input.Length; i++)
{
     if (words.ContainsKey(input[i]))
     {
         contents[i] = words[input[i]];
     }
}
string result = string.Join(" ", contents);

LINQ方式:

var result = string.Join(" ", input.Where(words.ContainsKey).Select(c => words[c]));

答案 1 :(得分:1)

首先,缓冲区是一个char数组。数组具有固定的大小,为了扩展它们,您需要创建一个新的。为了克服这项繁琐的工作,有一个StringBuilder类可以自动执行此操作。

其次,如果你在if语句中保留这些'Alpha','Beta',...字符串,你将会有很长的代码。您可以使用字典替换它,或者从单个字符串或文本文件创建它。

将其付诸实践:

class MyClass
{
    static Dictionary<char, string> _map = new Dictionary<char, string>();

    static MyClass()
    {
        _map.Add('a', "Alpha");
        _map.Add('b', "Beta");
        // etc
    }

    static string WordMap(string data)
    {
        var output = new StringBuilder();
        foreach (char c in data)
        {
            if (_map.ContainsKey(c))
            {
                output.Append(_map[c]);
                output.Append(' ');
            }
        }
        return output.ToString();
    }
}

没有字典的解决方案:

static string WordMap(string data)
{
    const string words = "Alpha Beta Gamma Delta ...";

    string[] wordMap = words.Split(' ');

    var output = new StringBuilder();
    foreach (char c in data)
    {
        int index = c - 'a';
        if (index >= 0 && index < wordMap.Length)
        {
            output.Append(wordMap[index]);
            output.Append(' ');
        }
    }
    return output.ToString();
}

答案 2 :(得分:0)

提示: 您不必从字符串创建字符数组,您可以通过索引器轻松访问字符串中的单个字符:

char some = "123"[2];

当你使用“”时,你创建的字符串不是char,因此你应该使用''创建字符进行比较:

if (some == 'a') Console.WriteLine("character is a, see how you compare chars!!!");

答案 3 :(得分:0)

使用LINQ和String.Join,它简短易读。由于您想要为特殊字符添加新单词,因此您需要一个单词映射。我会使用Dictionary<char, string>

static Dictionary<char, string> wordMap = new Dictionary<char, string>()
{
    {'a', "Alpha"}, {'b', "Beta"},{'c', "Gamma"}, {'d', "Delta"}
};

static string WordMap(string value)
{
    var strings = value
        .Select(c => 
        {
            string word; 
            if(!wordMap.TryGetValue(c, out word))
                word = c.ToString();
            return word;
        });
    return string.Join("", strings);
}

测试:

string newString = WordMap("abcdeghj");  // AlphaBetaGammaDeltaeghj

答案 4 :(得分:0)

一个很好的解决方案......

    string[] words = { "Alpha", "Beta", "C_word", "D_Word" }; // ....

    string myPhrase = "aBC";

    myPhrase.Replace(" ", string.Empty).ToList().ForEach(a =>
    { 
        int asciiCode = (int)a;
        /// ToUpper()
        int index = asciiCode >= 97 ? asciiCode - 32 : asciiCode;
        Console.WriteLine(words[index - 65]); // ascii --> 65-a , 66-b ...
    });

答案 5 :(得分:0)

另一个包含not found选项的答案变体。

 static Dictionary<char, string> Mapping =
     new Dictionary<char, string>() 
         { { 'a', "alpha" }, { 'b', "beta" }, { 'c', "gamma" }, { 'd', "zeta" } };

    static void Main(string[] args)
    {            
        string test = "abcx";
        Console.WriteLine(string.Join(" ", test.Select(t => GetMapping(t))));  
        //output alpha beta gamma not found         
        Console.ReadKey();
    }

    static string GetMapping(char key)
    {
        if (Mapping.ContainsKey(key))
            return Mapping.First(a => a.Key == key).Value;
        else
            return "not found";            
    }      

答案 6 :(得分:-1)

只需在构建结果的位置声明第二个变量即可。 我认为你有一些语法问题,你需要在一个“==” 条件,否则这是一项任务。

static string WordMap(string value)
{
      string result = string.Empty;
      char[] buffer = value.ToCharArray();
      for (int i = 0; i < buffer.Length; i++)
      {
          if (letter == "a")
          {
              result += ("Alpha");
          }
          //and so on            

       }

       return result;           
 }

但我只会这样做,如果这是“只是为了好玩”的代码, 因为它不会很快。 像我一样建立结果很慢,更好的方法是

result = string.Concat(result, "(Alpha)");

更快的方法是使用StringBuilder(s。文档), 它为您提供快速方便的方法来处理更大的字符串。 这里只有垮台,你需要知道一点,结果有多大 将以字符为单位,因为您需要提供起始维度。 在这里你不应该只用1或100开始。每次,当StringBuilder时 已满,它会创建一个新的更大的实例并复制值,因此需要多个实例 这将填补你的记忆,这可能会导致内存不足异常, 在处理数万个字符时。

但正如所说,只是为了有趣的代码,所有这些并不重要...... 当然,您需要注意,如果您这样做,您的结果将会如此 在一条直线上,没有休息。如果你想要换行符,请在末尾添加“\ n” 字符串。或者添加任何你需要的东西。

此致

马库斯