2013-12-05 2 views
0

Привет, у меня есть небольшие проблемы с этим одним из аспектов моего кода. У меня есть несколько строк, и у меня есть множество символов. Я пытаюсь заменить последние две буквы каждой строки символами в массиве символов до последнего.Замена букв на словах

Мой массив полукокса выглядит следующим образом:

char[] array = { 'v', 'x', 'f' }; 

Мой код до сих пор:

char[] array = { 'v', 'x', 'f' }; 
     string newWord=""; 
     string apple="apple"; 
     string sam="sam"; 

     foreach(char c in array) 
     { 
      apple= apple.Substring(0, apple.Length - 2) +""; ///DON'T KNOW WHAT TO PUT HERE; 
      sam= sam.Substring(0, sam.Length - 2)+""; ///DON'T KNOW WHAT TO PUT HERE; 
      newWord = apple+Environment.NewLine+sam ;  
     } 

Выход хотел бы так:

appvx 
sfm 

Может быть, я делаю это неправильно, но я прямо говорю об этом в подстроке, чтобы избавиться от последних буквами в слове, но если массив закончится, не будет ли это все еще удалить последние два. Например, слово sam по-прежнему должно иметь m в конце его, так как все символы в массиве уже использовались как то, что вышло, но показывает, но заменяют a на f

+2

Это не ваш реальный код, потому что он не будет компилироваться, как сейчас. Пожалуйста, отредактируйте свой вопрос и разместите свой ** настоящий ** код; составляя код по мере продвижения по вашему вопросу, не является фактическим усилием для решения проблемы. –

+0

да я знаю, что это не скомпилируется, потому что я не получу двоеточие –

+0

Я не знаю C#, но похоже, что вам нужно: 1> Использовать цикл, который знает счет 2> Работает только одна строка за цикл (вы могли бы поместите строки в массив), и насколько 'sam' становится' sfm', я предполагаю, что вам нужно установить указатель 'sam' на что-то вроде '\ 0', прежде чем писать над ним - см. ответ от @ JleruOHeP – n0741337

ответ

1

что-то вроде этого?

private static void something() 
{ 
    List<char> tokens = new List<char>(new char[]{ 'v', 'x', 'f' }); 

    List<char[]> lArr = new List<char[]>(); 
    lArr.Add("apple".ToCharArray()); 
    lArr.Add("sam".ToCharArray()); 

    List<string> lStr = new List<string>(); 

    int cnt = 2; 

    foreach (var token in tokens) 
    { 
     var aktArr = lArr.FirstOrDefault(); 
     if (aktArr == null) 
      break; 
     if (cnt == 0) 
     { 
      cnt = 2; 
      lStr.Add(new string(aktArr)); 
      lArr.RemoveAt(0); 
      aktArr = lArr.FirstOrDefault(); 
      if (aktArr == null) 
       break; 
     } 
     aktArr[aktArr.Length - cnt--] = token; 
    } 
    lStr.AddRange(lArr.Select(x => new string(x))); 

    foreach (var item in lStr) 
    { 
     Console.WriteLine(item); 
    } 
} 
+0

ok, поэтому мне действительно нужно разбить слова и вставить в них список символов –

+0

просто другой подход ... вы не «должны» ... вы можете это сделать без единого массива символов ... – DarkSquirrel42

+0

oh ok спасибо, что это понятно Я не в хорошем смысле с LINQ, но я понимаю, теперь большое спасибо для вашей помощи. Мне потребовалось некоторое время, пытаясь понять, как я могу это сделать без списка –

1

Вы можете обрабатывать строку как массив символы, поэтому результат может быть что-то вроде этого (если предположить, что у вас есть массив слов, а не только 2 переменные для них и маленький помощник для замены символов)

var words = new [] {"apple", "sam"}; 
var wordPos = 0; 
for (int i = 0; i < array.Length; i++) 
{ 
    var wordLen = words[wordPos].Length; 
    var letterPos = i % 2 == 0 ? 1 : 2; 
    words[wordPos] = words[wordPos].ReplaceAt(wordLen - letterPos, letter); 
    if (letterPos == 1) wordPos++; 
} 

public static string ReplaceAt(this string input, int index, char newChar) 
{ 
    if (input == null) 
    { 
     throw new ArgumentNullException("input"); 
    } 
    char[] chars = input.ToCharArray(); 
    chars[index] = newChar; 
    return new string(chars); 
} 
+0

бог благословляю вас, сэр спасибо за помощь, я не знаю, почему я не использовал коллекцию, как и все остальные –

1

Я думаю, что что-то, как это будет делать то, что вам нужно:

 var charArray = new[] {'a', 'b', 'c'}; 
     var words = new List<string> {"apple", "sam"}; 
     var currentWord = 0; 
     var currentChar = 0; 
     var charsToReplace = 2; 

     while (currentChar < charArray.Length && currentWord != words.Count) 
     { 
      var word = words[currentWord].ToCharArray(); 
      word[word.Length - charsToReplace] = charArray[currentChar]; 
      words[currentWord] = new string(word); 

      charsToReplace--; 
      currentChar++; 
      if (charsToReplace == 0) 
      { 
       charsToReplace = 2; 
       currentWord++; 
      } 
     } 

     words.ForEach(Console.WriteLine); 
+0

благодарю вас за ваше предложение и помогите, кажется, все действительно положили слова в список –

Смежные вопросы