none
Вставка символа между определенными строками... RRS feed

Ответы

  • Если бы эту задачу решал я, то ввел бы дополнительную переменную для хранения первого символа. Для начала записал бы туда какую-нибудь запятую. В начале цикла, которым вы выводите строки на экран, сделал бы проверку первой буквы текущего слова и того что у меня храниться в переменной. Если они отличаются, то в переменную сохраняем первую букву и выводим ее на экран. Понятен алгоритм? Или требуются дополнительные пояснения?
    23 января 2015 г. 12:29
    Отвечающий
  • А зачем вам сравнивать строки? Вам нужно сравнивать только первый символ очередной строки с символом, который вы будите хранить в спомогательной переменной.
    • Помечено в качестве ответа Dmitry28 23 января 2015 г. 14:42
    23 января 2015 г. 12:58
    Отвечающий
  • Всё сделал. Спасибо.
    public void ShowResult()
            {
               
                List<WordInfo> sortedWordInfos = concordanceDictionary.Values.OrderBy(a => a.Word).ToList();
    
                string temp2 = "";
                foreach (var pair in sortedWordInfos) 
                {
                    Console.WriteLine("\n");
                   // if (pair.Word != "")
                    
                        string temp = pair.Word.Substring(0, 1).ToUpper();
                        if (temp != temp2)
                            Console.WriteLine("[{0}]", pair.Word.Substring(0, 1).ToUpper());
                        temp2 = pair.Word.Substring(0, 1).ToUpper();
                    
                    Console.Write(pair.Word + " " + pair.WordCount + ":.......");
                    foreach (int lineNumber in pair.LineNumbers)
                    {
                        Console.Write("{0},", lineNumber);
                    }
                }
            }

    • Помечено в качестве ответа Dmitry28 23 января 2015 г. 14:42
    23 января 2015 г. 14:09

Все ответы

  • Добрый день, Дмитрий.

    Можно поподробней про стоящую перед вами проблему? На каком языке программирования вы пишите? Какой тип приложения? Что конкретно вы попробовали и что у вас не получилось?

    • Помечено в качестве ответа Dmitry28 23 января 2015 г. 12:27
    • Снята пометка об ответе Dmitry28 23 января 2015 г. 12:27
    23 января 2015 г. 11:52
    Отвечающий
  • Добрый день, Алексей.

    Пишу на C#, консольное приложение.

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

    A -  вот это вставить

    and ...

    apple...

    W - это

    write....

    R - это

    read...

    Понимаю что вопрос глупый и сам скорее всего додумаюсь. Но решил проверить эффективен ли  этот сайт. 

    Спасибо за внимание.

    23 января 2015 г. 12:26
  • Если бы эту задачу решал я, то ввел бы дополнительную переменную для хранения первого символа. Для начала записал бы туда какую-нибудь запятую. В начале цикла, которым вы выводите строки на экран, сделал бы проверку первой буквы текущего слова и того что у меня храниться в переменной. Если они отличаются, то в переменную сохраняем первую букву и выводим ее на экран. Понятен алгоритм? Или требуются дополнительные пояснения?
    23 января 2015 г. 12:29
    Отвечающий
  • Алгоритм понятен. Я думал вставлять эту букву в коллекцию. И ещё не нашел как проверять первую букву каждой строки. 
    23 января 2015 г. 12:37
  • Если у вас коллекция используется не только при этом выводе, но и для других задач, то лучшее ее не изменять, а лишние строки только выводить. Для получения первого символа строки, можно воспользоваться несколькими подходами:

    string str = "Hello!";
    char chChar = str[0]; // Первый символ получаем как тип Char
    string chStr = str.Substring(0, 1); // Получаем первый символ как строку

    23 января 2015 г. 12:41
    Отвечающий
  • Это я видел. Но как сравнить текущую строку со следующей?

    foreach (var pair in sortedWordInfos)
                {
                    
                      Console.Write("{0},   {1},  : ",pair.Word,pair.WordCount);

                    Logics.WriteNumberLines(pair.LineNumbers);
                    Console.WriteLine("\n");  
                    
                    
                }

    public static void WriteNumberLines(List<int> Lines)
            {
                foreach (int lineNumber in Lines)
                {
                    Console.Write(lineNumber.ToString() + " ");
                }
            }




    • Изменено Dmitry28 23 января 2015 г. 12:55
    23 января 2015 г. 12:47
  • А зачем вам сравнивать строки? Вам нужно сравнивать только первый символ очередной строки с символом, который вы будите хранить в спомогательной переменной.
    • Помечено в качестве ответа Dmitry28 23 января 2015 г. 14:42
    23 января 2015 г. 12:58
    Отвечающий
  • foreach (var pair in sortedWordInfos)
                {
                    string a = " ,";
                    if (pair.Word.Substring(0,1)!=a)
                    {
                        a = pair.Word.Substring(0, 1);
                        Console.WriteLine(a);
    
                        Console.Write("{0},   {1},  : ", pair.Word, pair.WordCount);
    
                        Logics.WriteNumberLines(pair.LineNumbers);
                        Console.WriteLine("\n");  
                    }
    
                      Console.Write("{0},   {1},  : ",pair.Word,pair.WordCount);
    
                    Logics.WriteNumberLines(pair.LineNumbers);
                    Console.WriteLine("\n");  
                    
                    
                }
    Что - то вроде этого? Ошибка в этой строке . Не знаю как правильно сделать. 

    if (pair.Word.Substring(0,1)!=a)

    23 января 2015 г. 13:11
  • Что значит ошибка? Ошибка компиляции? Или сравнение не работает?

    23 января 2015 г. 13:14
    Отвечающий
  • Компиляции:

    An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll

    Additional information: Индекс и длина должны указывать на позицию в строке.

    23 января 2015 г. 13:15
  • Значит у вас в Word пустая строка. Добавьте на это проверку.
    23 января 2015 г. 13:58
    Отвечающий
  • Всё сделал. Спасибо.
    public void ShowResult()
            {
               
                List<WordInfo> sortedWordInfos = concordanceDictionary.Values.OrderBy(a => a.Word).ToList();
    
                string temp2 = "";
                foreach (var pair in sortedWordInfos) 
                {
                    Console.WriteLine("\n");
                   // if (pair.Word != "")
                    
                        string temp = pair.Word.Substring(0, 1).ToUpper();
                        if (temp != temp2)
                            Console.WriteLine("[{0}]", pair.Word.Substring(0, 1).ToUpper());
                        temp2 = pair.Word.Substring(0, 1).ToUpper();
                    
                    Console.Write(pair.Word + " " + pair.WordCount + ":.......");
                    foreach (int lineNumber in pair.LineNumbers)
                    {
                        Console.Write("{0},", lineNumber);
                    }
                }
            }

    • Помечено в качестве ответа Dmitry28 23 января 2015 г. 14:42
    23 января 2015 г. 14:09
  • Пожалуйста. Будут вопросы, обращайтесь, постараемся помочь.

    Если какой-то ответ или ответы помогли с решением вашей проблемы, не забудьте их отметить. Для этого под каждым сообщением есть кнопка "Пометить как ответ".


    23 января 2015 г. 14:41
    Отвечающий