Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
wind_mill
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 45
#1

разделение строки на слова - C++

26.11.2011, 20:54. Просмотров 4374. Ответов 22
Метки нет (Все метки)

нужно разбить строку на слова (си)
без использования библиотеки string.h (пользоваться можно только stdio.h)
можно использовать многомерные массивы

подкиньте идею как реализовать\алгоритм

заранее благодарю !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 20:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос разделение строки на слова (C++):

Разделение строки на слова - C++
Текст в файле содержит числа, которые записаны в восьмеричной системе счисления. Преобразовать эти числа в десятичную систему счисления и...

Разделение строки на слова - C++
Подскажите пожалуйста, как разделить строку на отдельные слова. Заранее спасибо.

Разделение строки на отдельные слова [С++] - C++
Надо разделить строку на отдельные слова. Использовать strtok() нельзя.

Символьные строки. Разделение на слова - C++
Помогите написать прогу. Не могу разобраться, какие команды применить. Так же нужно использовать отдельно функцию. В Файле находится...

С++, MFC, разделение строки типа CString на слова - C++
Есть три списка ListBox и одно поле редактирования EditBox. В EditBox вводится информация в формате «Фамилия Имя Отчество». По завершении...

Разделение строки типа String на отдельные слова с разделяющим символом - C++
Подскажите пожалуйста, как строку с n-ым количеством слов разделённых символом точка запятой разделить и поместить предположим в массив

22
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.11.2011, 22:57 #16
Цитата Сообщение от Thinker Посмотреть сообщение
Разделители могут быть и точки, запятые и т.д.
Ну это уже если сильно углубляться, а так не красиво получатся слова через запятую (пробелы всеравно нужны)





Цитата Сообщение от Thinker Посмотреть сообщение
Функция gets() не контролирует количество вводимых символов, например, у вас строка char s[10], а вы ввели более 9 символов, тем самым для '\0' места не найдется.
Если я не ошибаюсь, есть вероятность, что все равно программа отработает корректно, нелепо конечно так делать...
Цитата Сообщение от Jupiter Посмотреть сообщение
если gets-ом считать больше чем размер массива то произойдет переполнение, а fgets этого не допустит
Так это можно писать почти в каждой ветке о символьных массива в Си, даже и со сканфом
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 23:04 #17
go, имеется ввиду, что мы вводим множество разделителей, в котором пробел, точка и т.д., то есть несколько разделителей, если я правильно понял вас

Поэтому лучше fgets()
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.11.2011, 23:07 #18
Thinker, теперь я вас не поянл
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 23:14 #19
Цитата Сообщение от go Посмотреть сообщение
Thinker, теперь я вас не понял
Вы поняли, просто мы об одном разными словами говорим. Например, пусть DEL = " .,;:\t\n" - множество разделителей. Тогда слово - цепочка подряд идущих символов по первого символа из DEL. Например, если строка s = "abc,. .xyz:;", то словами будут
abc
xyz
А если DEL = " ", то слова будут такими:
abc,.
.xyz:;
2
wind_mill
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 45
27.11.2011, 01:18  [ТС] #20
совсем соображалка не работает
почему программа работает не верно ?
вот код и условие задачи:
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
// Ввести строку и слово, удалить все вхождения слова и вывести строку
 
#include <conio.h> // для getch()
#include <stdio.h>
 
void main (void)
 
{
    int LEN; // длина строки
    char *str=new char[100];  // исходная строка
    char *word=new char[100];  // исходное слово
    char *w=new char[100];
    puts("Enter string:");
    gets(str);
    puts("\nEnter word:");
    gets(w);
    puts("\n----------------------------------------");
    
    // находим длину строки
    for(int a=0; str[a]!='\0'; a++)
        LEN=a; 
    
    // делим строку на слова
    for(int i=0, k=0; i<=LEN+1; i++, k++) 
    {
        if(str[i]==' ' || str[i]=='\0') 
        {
            word[k]=='\0'; // сравниваем слова
            for (int a=0; word[a]!='\0' && w[a]!='\0'; a++) 
            {
                if (word[a] != w[a]) 
                {
                    puts(word); 
                    break;
                }
            }
            k=-1;
        }
        else
            word[k]=str[i];
        getch();
    
    }
}
Добавлено через 26 минут
передовай tempSlova в какую-нибудь функцию и там работай с ней.
можно по подробней (чайник )
0
SleepMaster
40 / 40 / 1
Регистрация: 26.11.2011
Сообщений: 80
27.11.2011, 01:33 #21
Для проверки на разделитель используйте функцию isspace(char) из библиотеки <cstring>.
т.е код
C++
1
2
        for(int a=0; str[a]!='\0'; a++)
                LEN=a;
замените на
C++
1
2
        for(int a=0; !isspace(s[a]); a++)
                LEN=a;
ну и дальше по аналогии.
Потому что isspace обрабатывает не только пробелы, но и знаки пропуска строки, табуляции, и прочее.
0
ZaVyLoN
83 / 83 / 6
Регистрация: 26.10.2009
Сообщений: 269
27.11.2011, 02:20 #22
Цитата Сообщение от wind_mill Посмотреть сообщение
можно по подробней (чайник )
C++
1
2
3
4
5
6
7
8
9
void func (char *Str)
{
    // void, char* - в зависимости что тебе нужно.
    //Твой код, например здесь считаешь длину этого слова или что тебе нужно.
    
}
 
// в main передаешь в твою фу-цию tempSlova
func(tempSlova);
0
wind_mill
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 45
28.11.2011, 00:55  [ТС] #23
вот код программы, рабочий

задача:
ввести строку и слово, вывести измененную строку, которая не содержит этого слова

код:
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
// Ввести строку и слово, удалить все вхождения слова и вывести строку
 
#include <conio.h> // для getch()
#include <stdio.h>
 
void main (void)
{
    char *stringPtr=new char[100];
    char *wordsPtr=new char[100];
    char s[100];
    char word[100];
    puts("Enter string:");
    gets(stringPtr);
    puts("\nEnter word:");
    gets(word);
    puts("\nThe resulting string:");
 
    for(int i=0, k=0; i<=100; i++, k++)
    {
        if(stringPtr[i]==' ' || stringPtr[i]=='\0')
        {
            wordsPtr[k]='\0';
            for(int j=0; j<=k; j++)
                s[j]=wordsPtr[j];
            for(int u=0; u<=k; u++)
            {
                if(s[u]!=word[u])
                {
                    printf("%s\t", s);
                break;
                }
            }
            for(int z=0; z<=k; z++)
                s[z]=0;
            k=-1;
        }
        else
            wordsPtr[k]=stringPtr[i];
    }
    getch();
}
Добавлено через 3 минуты
спасибо за помощь )
0
28.11.2011, 00:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 00:55
Привет! Вот еще темы с ответами:

Разделение слова на буквы - C++
Всем доброго времени суток. У меня возник вопрос. Допустим у есть переменная X типа string, в которую записано слово, &quot;Code&quot;. Как мне...

Токенизация, разделение текста на слова - C++
Здравствуйте, по заданию необходимо 1.Прочитать текст из первого файла. 2.Выделить словоформы и вписать их в отдельный двумерный...

Разделение произвольного текста на слова - C++
Пытаюсь разделить произвольный текст на отдельные слова. И присвоить каждое слово элементу структуры. Но когда программа проходит первую...

Напечатать все слова, отличные от последнего слова строки, удалив из каждого слова первую и последнюю буквы - C++
Близиться сессия,а завтра мне сдавать 2 проги. Помогите ребят,могу даже 100 скинуть,если уж так трудно помочь. 8.Задан...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.