Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 77, средняя оценка - 4.96
$tudent
4 / 2 / 0
Регистрация: 02.03.2009
Сообщений: 54
#1

Работа с текстом - C++

04.08.2009, 18:59. Просмотров 10428. Ответов 9
Метки нет (Все метки)

Задача C++:
Даны натуральное число n, символы s1 ...,sn.. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами.
а) Подсчитать количество слов в данной последовательности.
б) Подсчитать количество букв а в последнем слове данной последовательности.
в) Найти количество слов, начинающихся с буквы б.
г) Найти количество слов, у которых первый и последний символы совпадают между собой.
д) Найти какое-нибудь слово, начинающееся с буквы а.
е) Преобразовать данную последовательность, заменяя всякое вхождение слова это на слово то.
ж) Найти длину самого короткого слова.


Как введенные слова вставить в символьный массив например char s[n] и удалить пробелы , каждое слово это отдельный элемент массива ,и как работать отдельно со словами т.е слово это отдельный текстовый массив ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2009, 18:59     Работа с текстом
Посмотрите здесь:

Работа с текстом - C++
Помогите, пожалуйста, исправить программу... Задание такое: Задан текст. По правилам пунктуации пробел может стоять после, а не перед...

Файлы, работа с текстом - C++
Огромная просьба помочь!! Мне очень нужно написать программу, которая будет считывать текст из файла и копировать все слова длиной от l1 до...

Работа с текстом (цвет) - C++
Всем привет! Подскажите пожалуйста как поменять цвет фона в консоли, чтобы вместо чорного экрана сделать что-то повеселее?

С++ работа с файлами и текстом - C++
Задана последовательность идентификаторов, разделенных сериями пробелов. Последовательность задана строкой символов (string) заканчивается...

Массив. Работа с текстом. - C++
В общем, задание такого: пользователь вводит Ф.И.О (неважно чьё) и программа должна вывести суммарное количество введенных букв, количество...

С++ работа с текстом из файла - C++
Народ помогите плиз !!! Надо прочитать текст из файла , для дальнейшей работы с ним (текстом) , т.е. надо записать весь текст в массив , у...

Файлы, меню, работа с текстом - C++
Добрый вечер, помогите пожалуйста найти ошибку в алгоритме, написал программу в которой задан текст, и нужно напечатать все слова отличные...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
04.08.2009, 21:31     Работа с текстом #2
Для всех задач кроме е) будет удобнее разбить введенный тобою массив символов на массив слов. В этом случае ты будешь работать с подобием двумерного массива. Для задачи е) проще будет работать прямо с цельной строкой.

И если ты используешь C++, то можешь пользоваться типом string вместо char[].
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
04.08.2009, 21:51     Работа с текстом #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
// Исходный массив
char *s= "???????";
int n= strlen( s );
 
// Скопируем.
char *d= strdup( s );
 
// Пусть слов не более MAX_WORDS.
#define MAX_WORDS 100
char *word[MAX_WORDS];
 
// Длина слова
int word_len[MAX_WORDS];
 
// Кол-во слов
int nword= 0;
 
// Сканируем пробелы, заполняем массив word[].
// При этом word[0] указывает в массив d на первое слово.
// word[1] - указывает на следующее слово и так далее.
// При этом все слова должны закачиваться '\0' - немного испортим массив d.
...
 
// Печать всех слов
printf( "Всего слов: %d\n", nword );
for ( i= 0; i<nword; i++ ) {
    printf( "слово %d |%s|\n", i, word[i] );
}
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
04.08.2009, 21:51     Работа с текстом #4
C++
1
2
3
4
5
6
7
8
9
10
#include <vector>
#include <string>
#include <algorithm>
...
int main()
{
vector<string>v;
v.push_back("All words")
v.do_something_what_you_want_in_your_task//
}
Через вектор , его команды и алгоритмы find(),count()и т.д можно сделать все пункты
$tudent
4 / 2 / 0
Регистрация: 02.03.2009
Сообщений: 54
04.08.2009, 22:17  [ТС]     Работа с текстом #5
Через вектор , его команды и алгоритмы find(),count()и т.д можно сделать все пункты
Эт как ? можно через функции STL или как проще ?

Для всех задач кроме е) будет удобнее разбить введенный тобою массив символов на массив слов. В этом случае ты будешь работать с подобием двумерного массива
S[1,n]=слово как в двухмерный массив забить ?
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
04.08.2009, 22:20     Работа с текстом #6
vector - это и есть STL.
Видимо тебе задачу дали, чтобы ты STL изучил
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
04.08.2009, 22:39     Работа с текстом #7
C++
1
2
3
4
std::string c[3];
c[2]="dfsdfsdf";
std::cout<<c[2]<<std::endl;
std::cout<<c[2][4]<<std::endl;
Вот так примерно создается массив слов. Каждое слово - строка.
Если таки не хочешь использовать string, то используй для присваивания strcpy в двумерных чаровских массивах.
Но вообще Sekt прав по поводу векторов - ими удобнее. Однако, если ты с указателями еще не на "короткой ноге", лучше пока не пользуйся векторами.
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
05.08.2009, 01:20     Работа с текстом #8
Цитата Сообщение от $tudent Посмотреть сообщение
Эт как ? можно через функции STL или как проще ?
както так..
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
51
52
53
54
55
56
57
58
59
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
#include <string>
 
struct equal_to_char{
    equal_to_char(char _ch = 'a'):ch(_ch){
 
    } 
    bool operator () (const std::string &rhs){
        return rhs[0] == ch;
    }
private:
    char ch;
};
 
template< typename _It >
struct first_equal_last{
    bool operator () (const _It &rhs){
        return *rhs.begin() == *rhs.rbegin();
    }
};
 
int main() {
    std::string words = "bbcb  dfgh eto ac fsff eto biot bvvv aaa eto aaa ";
    std::vector<std::string> word;
    {
        std::stringstream ss(words);
        std::copy(
            std::istream_iterator<std::string>(ss),
            std::istream_iterator<std::string>(),
            back_inserter(word)
            );
    }
    //а) Подсчитать количество слов в данной последовательности.
    std::cout << "count: " << word.size() << std::endl;
 
    //б) Подсчитать количество букв а в последнем слове данной последовательности.
    std::vector<std::string>::reverse_iterator i = word.rbegin();
    std::cout << (int)std::count(i->begin(), i->end(), 'a') << std::endl;
 
    //в) Найти количество слов, начинающихся с буквы б.
    std::cout << (int)std::count_if(word.begin(), word.end(), equal_to_char('b'))  << std::endl;
 
    //г) Найти количество слов, у которых первый и последний символы совпадают между собой.
    std::cout << (int)std::count_if(word.begin(), word.end(), first_equal_last<std::string>()) << std::endl;
 
    //д) Найти какое-нибудь слово, начинающееся с буквы а.
    std::cout << *std::find_if(word.begin(), word.end(), equal_to_char('a')) << std::endl;
 
    //е) Преобразовать данную последовательность, заменяя всякое вхождение слова это на слово то.
    std::replace(word.begin(), word.end(), std::string("eto"), std::string("to"));
    std::copy(word.begin(), word.end(), std::ostream_iterator<std::string>(std::cout," "));
    std::cout << '\n';
 
    return 0;
}
$tudent
4 / 2 / 0
Регистрация: 02.03.2009
Сообщений: 54
05.08.2009, 09:53  [ТС]     Работа с текстом #9
ISergey
Как с клавиатуры слова ввести ? через cin>> идет не правильная работа программы и как с русским языком подружить MS-DOS ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2009, 17:13     Работа с текстом
Еще ссылки по теме:

Работа с текстом без String - C++
Слова текста из малых латинских букв записаны не менее чем через один пробел; текст заканчивается точкой. БЕЗ ИСПОЛЬЗОВАНИЯ конструкции...

Работа с русским текстом в linux - C++
Пишу консольное приложение в Code::Blocks на Ubuntu 15.04. Выводит он русский текст и без всяких функций, а вот с чтением проблема,...

Работа с многострочным текстом(введенным из консоли) - C++
Имеется условие: С клавиатуры вводится многострочный текст. Оставить в тексте только первые вхождения каждой буквы, остальные –...

Работа с текстом без использования string - C++
Нужно взять како-то небольшой текст и напечатать все слова, которые начинаются с буквы, отличную от буквы, с которой начинается первое...

Работа с текстом, найти среднее арифметическое - C++
Как, например, в с++ взять инфу такого типа из файла: m 985 f 2865 m 555 f 122 И если переменная равна f, программа должна...


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

Или воспользуйтесь поиском по форуму:
ISergey
Maniac
Эксперт С++
1372 / 883 / 52
Регистрация: 02.01.2009
Сообщений: 2,652
Записей в блоге: 1
05.08.2009, 17:13     Работа с текстом #10
Цитата Сообщение от $tudent Посмотреть сообщение
Как с клавиатуры слова ввести ?
C++
1
getline(std::cin, words);
Цитата Сообщение от $tudent Посмотреть сообщение
как с русским языком подружить MS-DOS ?
http://www.cyberforum.ru/cpp-beginne...ad10662-4.html
Yandex
Объявления
05.08.2009, 17:13     Работа с текстом
Ответ Создать тему
Опции темы

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