如何在C#中的字符串中的每个字母之间添加一个符号?

时间:2017-04-20 20:14:04

标签: c# string loops

我有一个任务,我必须编写一个名为accum的函数,它将给定的字符串转换成这样的字符:

Accumul.Accum("abcd");    // "A-Bb-Ccc-Dddd"
Accumul.Accum("RqaEzty"); // "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"
Accumul.Accum("cwAt");    // "C-Ww-Aaa-Tttt"

到目前为止,我只将每个字母转换为大写字母......现在我正在写它,我想我可以更容易 - 首先将每个字母的数量相乘,然后在那里添加一个短划线......好吧,好吧,让我说我已经乘以它们的数量(我稍后会处理它),现在我需要添加破折号。我尝试了几种方法来解决这个问题,包括:for和foreach(现在我想起来了,我不能使用foreach,如果我想在将字母相乘后添加一个破折号)和String.Join,String.Insert之类的东西名为StringBuilder with Append(我并不完全理解),它对字符串没有任何作用。

我试过的其中一个循环是:

for (int letter = 0; letter < s.Length-1; letter += 2) {
      if (letter % 2 == 0) s.Replace("", "-");
     }

for (int letter = 0; letter < s.Length; letter++) {
      return String.Join(s, "-");
     }

第二个返回“无法访问的代码”错误。我在这里做错了什么,它对字符串没有任何作用(在大写转换后)?另外,有没有方法可以复制每个字母,以增加它们的数量?

4 个答案:

答案 0 :(得分:2)

正如您所说,只要创建了可枚举而不是foreach,就可以使用string.join。由于字符串本身是可枚举的,因此可以使用包含索引的Linq select重载:

var input = "abcd";
var res = string.Join("-", input.Select((c,i) => Char.ToUpper(c) + new string(Char.ToLower(c),i)));

(假设每个字符都是唯一的或可以使用。例如“aab”将变为“A-Aa-Bbb”)

说明: Select扩展方法将lambda函数作为参数,c是char,i是索引。 lambda返回char(c)的大写版本,后面跟着索引长度(new string(char,length))的小写字符串的字符串(这是第一个索引的空字符串)。最后,string.join将结果枚举与每个元素之间的-连接起来。

答案 1 :(得分:0)

使用此代码。

string result = String.Empty;
for (int i = 0; i < s.Length; i++)
{
    char c = s[i];
    result += char.ToUpper(c);
    result += new String(char.ToLower(c), i);
    if (i < s.Length - 1)
    {
        result += "-";
    }
}

最好使用StringBuilder而不是字符串连接,但这段代码可以更清晰一些。

答案 2 :(得分:0)

字符串是不可变的,这意味着一旦创建它们就无法修改它们。这意味着Replace函数返回一个你需要以某种方式捕获的新字符串:

s = s.Replace("x", "-");

您目前没有在任何地方分配Replace方法的结果,这就是您没有看到任何结果的原因

答案 3 :(得分:0)

对于未来,解决这类问题的最佳方法不是搜索代码片段,而是逐步写下如何用普通英语或其他伪代码实现预期结果的算法,例如:

鉴于我输入字符串&#39; abcd&#39;应该变成输出字符串&#39; A-Bb-Ccc-Dddd&#39;。

  1. 复制第一个字符&#39; a&#39;从输入到缓冲区。
  2. 将字符的索引存储到Index。
  3. 如果Buffer只有一个字符,则将其设为大写字母。
  4. 如果Index大于1个跟踪缓冲区,其中包含Index-1小写字符。
  5. 追加短划线&#39; - &#39;到缓冲区。
  6. 将缓冲区内容复制到输出并清除缓冲区。
  7. 复制第二个字符&#39; b&#39;从输入到缓冲区。
  8. ... 等
  9. Aha时刻经常发生在第三次迭代中。希望能帮助到你! :)