Струнное деление - PullRequest
       7

Струнное деление

0 голосов
/ 11 марта 2010

Я хочу напечатать строку «my name is xxx», поскольку «xxx is name my» без использования специальных методов (например, методов пакета утилит в java); спасибо

Ответы [ 3 ]

5 голосов
/ 11 марта 2010
  String text = "my name is xxx";
  String reversed = "";
  for (String word : text.split(" ")) {
     reversed = word + " " + reversed;
  }
  reversed = reversed.trim();

Если вызов метода абсолютно не разрешен, это немного запутанно.

  String text = "my name is xxx";
  char[] letters = text.toCharArray();
  char[] srettel = new char[letters.length];
  for (int last = letters.length, i = last - 1, j = 0; i >= -1; i--) {
     if (i == -1 || letters[i] == ' ') {
        for (int k = i + 1; k < last; ) {
           srettel[j++] = letters[k++];
        }
        if (i != -1) srettel[j++] = ' ';
        last = i;
     }
  }
  String reversed = new String(srettel);

Это требует немного большего объяснения. Мы читаем входной массив справа налево (i--), и всякий раз, когда мы находим пробел, или когда мы в конечном итоге ударяемся о левую стену (i == -1), мы копируем (for k) слово, которое мы нашли, в выходной массив ([j++] =). Мы отслеживаем границы слова в last.

1 голос
/ 11 марта 2010

FYI, класс String находится в пакете java.lang .

0 голосов
/ 11 марта 2010

Я не знаю Java, но вот подход наихудшего случая.

Если вы не хотите использовать метод split (),

  string text = "My name is Khan";

    int length = text.Length;

    int numberOfWords = 0;

    for (int i = 0; i < text.Length; i++)
    {
        if (text[i] == ' ')
        {
            numberOfWords++;
        }
    }

    numberOfWords += 1; // no of words will be always plus one than no of space.

    string[] wordCollection = new string[numberOfWords];

    int wordLocation = 0;

    for (int i = 0; i < text.Length; i++)
    {
        if (text[i] == ' ')
        {
            wordLocation++;
        }

        wordCollection[wordLocation] += text[i];
    }

    string reversedString = string.Empty;

    foreach (string str in wordCollection)
    {
        reversedString = str + " " + reversedString;
    }

    Console.Write(reversedString.Trim());

Если это домашнее задание и оно передано кому-то другому, значит, вы проиграли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...