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

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

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

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

26.11.2011, 20:54. Просмотров 4346. Ответов 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
ZaVyLoN
83 / 83 / 6
Регистрация: 26.10.2009
Сообщений: 269
26.11.2011, 22:19 #2
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
#include <iostream>
#include <conio.h>
#include <locale>
using namespace std;
 
int main()
{   
    char *tempSlova = new char[20]; 
    char *myString = new char[100];
    cout << "Введите строку: ";
    fflush(stdin);
    gets(myString);
 
    cout << "Слова с втроке:" << endl;
 
    for(int i = 0, k =0 ; i <= strlen(myString); i++, k ++)
    {   
        if(myString[i] == ' '|| myString[i] == '\0')
        {   
            tempSlova[k] = '\0';
            puts(tempSlova);
            
            k = -1;
        }
        else
            tempSlova[k] = myString[i];
        
    }
    getch();
    
    return 0;
}
Если нужно работать с полученными словами, тогда вместо

C++
1
puts(tempSlova);
передовай tempSlova в какую-нибудь функцию и там работай с ней.
1
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 22:23 #3
ZaVyLoN. несколько замечаний:
требовалась программа на Си;
У вас используется функция strlen() из <string.h>;
разделители бывают не только пробелы;
по возможности не используйте gets() - плохая функция;
не подключен заголовочный файл <stdio.h>.
0
ZaVyLoN
83 / 83 / 6
Регистрация: 26.10.2009
Сообщений: 269
26.11.2011, 22:29 #4
Thinker, разве в С нельзя использовать strlen() ?
Помнню что нам поначалу препод не разрешал использовать strlen() в С. И приходилось ручками прописывать.

Цитата Сообщение от Thinker Посмотреть сообщение
разделители бывают не только пробелы.
думаю wind_mill разберется и доработает.
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 22:31 #5
ZaVyLoN, strlen() в любом случае можно использовать (куда без нее, хорошая функция), но по условию данной задачи нельзя подключать <string.h>, а эта функция именно оттуда.
0
ZaVyLoN
83 / 83 / 6
Регистрация: 26.10.2009
Сообщений: 269
26.11.2011, 22:37 #6
Заметил Ваше первое(с поправкой) сообщение.
Да и длину узнать не проблема без strlen/
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 22:38 #7
Цитата Сообщение от ZaVyLoN Посмотреть сообщение
Да и длину узнать не проблема без strlen/
никто и не спорит что сложно, просто малюсенькие замечания и все.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.11.2011, 22:39 #8
Thinker,
C
1
2
3
4
5
6
7
8
int strlen (char *s)
{
   int i;
   
   for (i=0;s[i];i++) ;
  
   return i;
}
0
Thinker
26.11.2011, 22:41
  #9

Не по теме:

go, это вы так показательно, намекая, что я бы так не написал?

0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.11.2011, 22:45 #10
Цитата Сообщение от Thinker Посмотреть сообщение
по возможности не используйте gets() - плохая функция;
А почему плохая то?

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
go, это вы так показательно, намекая, что я бы так не написал?
Случайно ваш ник вставился, пост адресовался автору темы, чтобы он вставил вместо подключения заголовочного файла.
Думаю, Вы еще элегантнее сделаете


Цитата Сообщение от Thinker Посмотреть сообщение
разделители бывают не только пробелы;
А какие еще?
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 22:50 #11
Функция gets() не контролирует количество вводимых символов, например, у вас строка char s[10], а вы ввели более 9 символов, тем самым для '\0' места не найдется. Лучше fgets().

Разделители могут быть и точки, запятые и т.д. Например, у вас строка "abc. xyz.". Разве слова abc. и xyz. вас устроят?!
0
ZaVyLoN
83 / 83 / 6
Регистрация: 26.10.2009
Сообщений: 269
26.11.2011, 22:50 #12
Цитата Сообщение от Thinker Посмотреть сообщение
никто и не спорит что сложно, просто малюсенькие замечания и все.
Напротив, замечания и критика только в плюс.
На мелочах посторен мир))



Цитата Сообщение от go Посмотреть сообщение
Сообщение от Thinker
разделители бывают не только пробелы;
А какие еще?
Знаки препининия.
1
wind_mill
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 45
26.11.2011, 22:50  [ТС] #13
идею ухватил, длину строки без string.h реализую
спасибо, друзья !
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.11.2011, 22:51 #14
Цитата Сообщение от go Посмотреть сообщение
А почему плохая то?
если gets-ом считать больше чем размер массива то произойдет переполнение, а fgets этого не допустит

опоздал...
0
wind_mill
1 / 1 / 0
Регистрация: 16.10.2011
Сообщений: 45
26.11.2011, 22:52  [ТС] #15
Функция gets() не контролирует количество вводимых символов, например, у вас строка char s[10], а вы ввели более 9 символов, тем самым для '\0' места не найдется. Лучше fgets().
новая для меня информация спасибо, учту
0
26.11.2011, 22:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2011, 22:52
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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