объединить строку с символом в C # - PullRequest
0 голосов
/ 19 июля 2009

Мне нужно объединить '*', который является строкой, с символом в массиве.

Например:

 int count=5;
 string asterisk="*";
  char p[0]='a';
  char p[1]='b';
  char p[2]='a';
  char p[3]='b';
  char p[4]='b';
 for(int i=0;i<count;i++)
 {
   asterisk=asterisk+"*";
  }
   p[0]=p[0]+asterisk;

Как я могу это сделать? Я хочу, чтобы результат был как "a*****"

Ответы [ 5 ]

3 голосов
/ 19 июля 2009

Как правило, это должно быть сделано с использованием StringBuilder, что даст лучшие характеристики (в зависимости от вашего кода и сколько раз вы его запускаете).
Кроме того, String имеет конструктор, который принимает символ и число и дает этот символ n раз в строке: http://msdn.microsoft.com/en-us/library/aa331867%28VS.71%29.aspx
В-третьих, посмотрите на String.ToCharArray, как в

char[] chars = "abcd".ToCharArray();

Это может сэкономить вам несколько строк.

3 голосов
/ 19 июля 2009

Вы не можете объединить строку с символом. Строка - это набор символов, который не помещается внутри одного символа.

Вы, вероятно, хотите что-то вроде

char asterisk = '*';
string []p = new string[] { "a", "b", "a", "b" };

p[0] = p[0] + new string(asterisk, count);
1 голос
/ 19 июля 2009

Мне кажется, проблема в слове «конкатенация». Я думаю, что он хочет перезаписать. Таким образом, он может показать полупароль как строка ...

char[] p = { 'a', 'b', 'a', 'b', 'b' };
char[] asterisks = (new String('*', p.Length -1)).ToCharArray();
asterisks.CopyTo(p, 1);

.CopyTo () запишет массив «звездочки» в массив «p». Предыдущие постеры верны в том, что вы должны использовать StringBuilder для подобных манипуляций, но если вы должны иметь его как массив символов, это способ сделать это. (Предполагая, что я понимаю, что вы хотите. "Я хочу, чтобы результат был похож на" ***** ".")

1 голос
/ 19 июля 2009

Вы пытаетесь сохранить результирующие строки в одном и том же массиве char, и это невозможно, потому что в одной переменной char вы можете сохранить только один символ, вы должны использовать string[] или List<string> для хранения результат ...

List<string> result = new List<string>();
string asterisk  = new string('*', 5); // Get a string with five * 

foreach (char c in charArray)
{
    result.Add(c + asterisk);
}

Или, если у вас есть доступ к Linq to Objects:

var result = charArray.Select(c => c + asterisk); // Select all
                                                  // chars and concatenate
                                                  // the  variable
1 голос
/ 19 июля 2009

Ваш пример не похож на действительный c # для меня. Если все, что вы пытаетесь сделать, это объединить несколько звездочек в конце строки, это должно работать:

string myString = "a";

for(int x = 0; x < 5; x++){
    myString += "*";
}

//myString should now equal "a*****"
...