2016-04-14 5 views
-2

Как написать функцию, которая задает входную строку, возвращает аббревиатуру для строки, используя только If/Then/Else, простые функции String и Looping синтаксис (не используйте Split() или его эквивалент)?Функция для возврата аббревиатуры строки

Строка s_input, s_acronym

s_input = "Матери против пьяного вождения"

s_acronym = f_get_acronym (s_input)

печати "акроним =" + s_acronym

/* аббревиатурой = MADD */

Мой код здесь. просто посмотрел, смогу ли я получить лучшее решение.

static string f_get_acronym(string s_input) 
{ 
    string s_acronym = ""; 
    for (int i = 0; i < s_input.Length; i++) 
    { 
     if (i == 0 && s_input[i].ToString() != " ") 
     { 
      s_acronym += s_input[i]; 
      continue; 
     } 

     if (s_input[i - 1].ToString() == " " && s_input[i].ToString() != " ") 
     { 
      s_acronym += s_input[i]; 
     } 
    } 

    return s_acronym.ToUpper(); 
} 
+2

Если какие-либо примеры и ваши попытки добавлены к вопросу, это поможет сделать ваш вопрос более ясным. –

+0

Только первая буква каждого слова? – Zalomon

+0

@MaheshChand только что отредактировал вопрос – Addie

ответ

-2

Ваш лучший способ сделать это - настроить петлю на петлю над каждой буквой. Если это первая буква в строке, ИЛИ первая буква после пробела, добавьте это письмо в строку temp, которая возвращается в конце.

например (базовый C++)

string toAcronym(string sentence) 
{ 
    string acronym = ""; 
    bool wasSpace = true; 
    for (int i = 0; i < sentence.length(); i++) 
    { 
     if (wasSpace == true) 
     { 
      if (sentence[i] != ' ') 
      { 
       wasSpace = false; 
       acronym += toupper(sentence[i]); 
      } 
      else 
      { 
       wasSpace = true; 
      } 
     } 
     else if (sentence[i] == ' ') 
     { 
      wasSpace = true; 
     } 
    } 
    return acronym; 
} 

Это может быть дополнительно улучшена путем проверки, чтобы убедиться, что письмо, чтобы добавить к аббревиатуре это письмо, а не номер/символ. OR ...

Если это первая буква в строке, добавьте ее в аббревиатуру. Затем запустите цикл для «найти следующий» пробел. Затем добавьте следующий символ. Непрерывно зациклируйте пробел «найти следующий» до тех пор, пока он не вернет null/eof/end строки, а затем вернется.

+0

Большое спасибо :) – Addie

+0

Это худший способ сделать это на языке высокого уровня, таком как C#. – Toxantron

+0

OP не искал лучший способ сделать это (если бы они были, они использовали Split()). Просто по-другому, используя простые команды. Может ли это быть написано лучше? Безусловно. Отвечает ли он на вопрос? Я бы сказал, что да. –

0

Regex - это путь в C#. Я знаю, что вам нужны только простые функции, но я хочу поставить это здесь для других читателей, которые будут направлены по правильному пути. ;)

var regex = new Regex(@"(?:\s*(?<first>\w))\w+"); 
var matches = regex.Matches("Mother against druck driving"); 
foreach (Match match in matches) 
{ 
    Console.Write(match.Groups["first"].Value); 
} 
0
private static string f_get_acronym(string s_input) 
{ 
     if (string.IsNullOrWhiteSpace(s_input)) 
      return string.Empty; 
     string accr = string.Empty; 
     accr += s_input[0]; 
     while (s_input.Length > 0) 
     { 
      int index = s_input.IndexOf(' '); 
      if (index > 0) 
      { 
       s_input = s_input.Substring(index + 1); 
       if (s_input.Length == 0) 
        break; 
       accr += s_input[0]; 
      } 
      else 
      { 
       break; 
      } 
     } 

     return accr.ToUpper(); 
} 
0

Держите это просто:

public static string Acronym(string input) 
{ 
    string result = string.Empty; 
    char last = ' '; 

    foreach(var c in input) 
    { 
     if(char.IsWhiteSpace(last)) 
     { 
      result += c;    
     } 
     last = c; 
    } 

    return result.ToUpper(); 
} 

Лучшая практика говорит, что вы должны использовать StringBuilder при добавлении в строку в цикле, хотя. Не знаю, как долго будут ваши акронимы.

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