代码之家  ›  专栏  ›  技术社区  ›  Colin Burnett

用C[重复]乘以字符串

  •  4
  • Colin Burnett  · 技术社区  · 15 年前

    可能重复:
    Can I "multiply" a string (in C#)?

    在python中,我可以这样做:

    >>> i = 3
    >>> 'hello' * i
    'hellohellohello'
    

    我怎样才能用C将字符串与Python中的字符串相乘? 我可以很容易地在for循环中完成它,但这会变得乏味和不表达。

    最后,我将以递归方式编写控制台,每次调用都会增加一个缩进级别。

    parent
        child
        child
        child
            grandchild
    

    最简单的方法就是 "\t" * indent .

    12 回复  |  直到 6 年前
        1
  •  19
  •   Community rohancragg    7 年前

    在中有一个扩展方法 this post .

    public static string Multiply(this string source, int multiplier)
    {
       StringBuilder sb = new StringBuilder(multiplier * source.Length);
       for (int i = 0; i < multiplier; i++)
       {
           sb.Append(source);
       }
    
       return sb.ToString();
    }
    
    string s = "</li></ul>".Multiply(10);
    
        2
  •  12
  •   Community rohancragg    7 年前

    如果您只需要一个字符,可以执行以下操作:

    new string('\t', i)
    

    this post 更多信息。

        3
  •  11
  •   Noldorin    15 年前

    BCL没有内置的功能来完成这项任务,但是一些LINQ可以轻松完成这项任务:

    var multiplied = string.Join("", Enumerable.Repeat("hello", 5).ToArray());
    
        4
  •  11
  •   Zachary    15 年前

    我是这样做的…

    string value = new string(' ',5).Replace(" ","Apple");
    
        5
  •  1
  •   Larsenal    15 年前
    int indent = 5;
    string s = new string('\t', indent);
    
        6
  •  1
  •   Daniel Brückner Pradip    15 年前

    这样做的一个方法是如下-但不太好。

     String.Join(String.Empty, Enumerable.Repeat("hello", 3).ToArray())
    

    更新

    啊哈…我记得…为字符…

     new String('x', 3)
    
        7
  •  1
  •   MSeifert    6 年前

    用LINQ聚合怎么样…

    var combined = Enumerable.Repeat("hello", 5).Aggregate("", (agg, current) => agg + current);
    
        8
  •  0
  •   Aric TenEyck    15 年前

    在C中没有这样的语句,您最好的选择可能是自己的multiplystring()函数。

        9
  •  0
  •   John Weldon user3678248    15 年前

    每迈迈尔斯:

    public static string times(this string str, int count)
    {
      StringBuilder sb = new StringBuilder();
      for(int i=0; i<count; i++) 
      {
        sb.Append(str);
      }
      return sb.ToString();
    }
    
        10
  •  0
  •   Guffa    15 年前

    只要您只想重复一个字符,就可以使用字符串构造函数:

    string indentation = new String('\t', indent);
    
        11
  •  0
  •   48klocs    15 年前

    我不认为您可以使用运算符重载来扩展System.String,但是您可以创建一个字符串包装器类来实现它。

    public class StringWrapper
    {
        public string Value { get; set; }
    
        public StringWrapper()
        {
            this.Value = string.Empty;
        }
    
        public StringWrapper(string value)
        {
            this.Value = value;
        }
    
        public static StringWrapper operator *(StringWrapper wrapper,
                                               int timesToRepeat)
        {
            StringBuilder builder = new StringBuilder();
    
            for (int i = 0; i < timesToRepeat; i++)
            {
                builder.Append(wrapper.Value);
            }
    
            return new StringWrapper(builder.ToString());
        }
    }
    

    然后像这样称呼它…

    var helloTimesThree = new StringWrapper("hello") * 3;
    

    从……中获取价值。

    helloTimesThree.Value;
    

    当然,明智的做法是让您的函数跟踪并传递当前的深度,然后将选项卡转储到一个基于此的for循环中。

        12
  •  -1
  •   Lloyd Powell binku    12 年前

    如果你需要三次串,就做吧

    string x = "hello";
    
    string combined = x + x + x;