Master of Orion
Эксперт .NET
6096 / 4952 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
1

Ошибка при печати значения строки из линейного списка

07.11.2012, 23:37. Показов 585. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Балуюсь тут. Смысл: пытаюсь разделить строку на слова, на шарпе готовый код есть, выглядит так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleApplication46
{
    internal static class Program
    {
        private static void Main()
        {
            string input = Console.ReadLine();
            var words = input.MySplit(true);
            foreach (var word in words)
                Console.WriteLine(word);
            Console.ReadKey();
        }
 
        private static IEnumerable<string> MySplit(this string s, bool removeEmpty)
        {
            var sb = new StringBuilder();
            foreach (char c in s + " ")
                if (char.IsLetter(c))
                    sb.Append(c);
                else
                {
                    if (sb.Length != 0 || !removeEmpty)
                        yield return sb.ToString();
                    sb.Length = 0;
                }
        }
    }
}
Пытаюсь переписать на С, не получается почему-то. Помогите пожалуйста.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
 
typedef struct MyStruct
{
    char *data;
    struct MyStruct *next;
} Node;
 
int IsLetter(char c)
{
    return c >= 'A' && c <= 'z';
}
 
Node* MySplit(char *s)
{
    char c, buf[100], *temp;
    int i,j,k;
    Node *head, *newnode, *tail;
    head = tail = NULL;
    for(i = 0; s[i] != '\0'; i++)
    {
        for(j = 0; IsLetter(s[i]); i++, j++)
            buf[j] = s[i];
        buf[++j] = '\0';
        temp = (char*)malloc(sizeof(char)*j);
        for(k = 0; k < j; k++)
            temp[k] = buf[k];
        newnode = (Node*)malloc(sizeof(Node));
        newnode->data = temp;
        newnode->next = NULL;
        if (head)
        {
            tail->next = newnode;
            tail = tail->next;
        }
        else
            head = tail = newnode;
    }
}
 
int main(void)
{
    Node *nodes, *node;
    getchar();
    nodes  = MySplit("Hello world!");
    for (node = nodes; node != NULL; node = node->next)
        printf("%s",node->data);
    return 0;
}
Добавлено через 6 часов 24 минуты
Помогите блин неужели так трудно?

Добавлено через 8 минут
Мда, дурак, в функцию нужно дописать
C
1
return head;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2012, 23:37
Ответы с готовыми решениями:

Ошибка при инициализации линейного списка
Ошибка при инициализации линейного списка, все время создает на один узел больше, помогите. Заранее...

Почему при вставке списка или печати пропадают строки в Excel
Почему при вставке списка пропадают строки в Екселе? Это очень неудобно с печатанием списков. Я бы...

Ошибка при создании линейного списка с типом данных в виде пользовательского класса
Добрый день. Помогите понять в чем ошибка при создании списка? int main() { setlocale(LC_ALL,...

Сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2
Как сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2

3
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
08.11.2012, 05:11 2
Цитата Сообщение от Psilon Посмотреть сообщение
C
1
2
3
4
int IsLetter(char c)
{
    return c >= 'A' && c <= 'z';
}
isalpha() из ctype.h

может, сначала сделать реализацию списка и strdup() ?
0
Master of Orion
Эксперт .NET
6096 / 4952 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.11.2012, 09:09  [ТС] 3
accept, не люблю подключать библиотеки ради однострочной функции, которую проще самому написать, мы с вами об этом уже говорили. Как реализовать список отдельно - хз, было бы ООП, было бы легко, создал поле или наследовал какой-нибудь IList, но тут же этого нет..
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
08.11.2012, 09:47 4
Цитата Сообщение от Psilon Посмотреть сообщение
которую проще самому написать, мы с вами об этом уже говорили
что-то не помню
во-первых, это стандартная функция, она есть во всех компиляторах
во-вторых, это переносимая функция, она не привязана к ASCII
в-третьих, зачем тратить время на лишнюю разработку

Цитата Сообщение от Psilon Посмотреть сообщение
Как реализовать список отдельно - хз, было бы ООП, было бы легко
он реализуется в виде структуры и набора функций для взаимодействия с ней
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2012, 09:47
Помогаю со студенческими работами здесь

Ошибка при удалении значения списка
В строке 34, как только задействуется функция erase вылезает ошибка. #include &quot;iostream&quot;...

Обрезание текста и отключение границ при печати(ошибка во время печати)
Есть несколько excel документов с заголовками и таблицей. Есть 2 проблемы, при переходе в режим...

МФУ Canon mf4730, при печати - ошибка печати
Купили новый принтер, в связи с этим некоторый переезд принтеров произошел. Со всеми порядок, кроме...

Разделение строки на слова с использованием линейного списка
Разработать программу для обработки строки с использованием линейного списка.Исходная строка...

Представить таблицу в виде линейного списка L, элементами которго являются строки таблицы
представить табл. в виде линейного списка L, элементами которго являются строки таблицы. Написать...

Представить таблицу в виде линейного списка L, элементами которого являются строки таблицы
Представить таблицу в виде линейного списка L, элементами которого являются строки таблицы....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru