Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.66/91: Рейтинг темы: голосов - 91, средняя оценка - 4.66
4 / 2 / 0
Регистрация: 02.03.2009
Сообщений: 54
1

Работа с текстом

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

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


Как введенные слова вставить в символьный массив например char s[n] и удалить пробелы , каждое слово это отдельный элемент массива ,и как работать отдельно со словами т.е слово это отдельный текстовый массив ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2009, 18:59
Ответы с готовыми решениями:

Работа с текстом
Помогите написать программу в VBA, которая открывает текстовый файл, просматривает файл, и...

Работа с текстом
Всем привет. Как можно сделать чтобы при вводе в текстовое поле, текст из этого поля автоматически...

Работа с текстом
Привет всем, нужно удалить из строки всё, что стоит перед символом (он один 1 в тексте) и ещё 2...

Работа с текстом
Доброго времени суток. Есть документ, в котором хранится информация. Пример: Size bd 36...

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

И если ты используешь C++, то можешь пользоваться типом string вместо char[].
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
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] );
}
0
158 / 157 / 47
Регистрация: 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()и т.д можно сделать все пункты
0
4 / 2 / 0
Регистрация: 02.03.2009
Сообщений: 54
04.08.2009, 22:17  [ТС] 5
Через вектор , его команды и алгоритмы find(),count()и т.д можно сделать все пункты
Эт как ? можно через функции STL или как проще ?

Для всех задач кроме е) будет удобнее разбить введенный тобою массив символов на массив слов. В этом случае ты будешь работать с подобием двумерного массива
S[1,n]=слово как в двухмерный массив забить ?
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
04.08.2009, 22:20 6
vector - это и есть STL.
Видимо тебе задачу дали, чтобы ты STL изучил
0
12 / 12 / 2
Регистрация: 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 прав по поводу векторов - ими удобнее. Однако, если ты с указателями еще не на "короткой ноге", лучше пока не пользуйся векторами.
0
Maniac
Эксперт С++
1445 / 947 / 158
Регистрация: 02.01.2009
Сообщений: 2,813
Записей в блоге: 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;
}
1
4 / 2 / 0
Регистрация: 02.03.2009
Сообщений: 54
05.08.2009, 09:53  [ТС] 9
ISergey
Как с клавиатуры слова ввести ? через cin>> идет не правильная работа программы и как с русским языком подружить MS-DOS ?
0
Maniac
Эксперт С++
1445 / 947 / 158
Регистрация: 02.01.2009
Сообщений: 2,813
Записей в блоге: 1
05.08.2009, 17:13 10
Цитата Сообщение от $tudent Посмотреть сообщение
Как с клавиатуры слова ввести ?
C++
1
getline(std::cin, words);
Цитата Сообщение от $tudent Посмотреть сообщение
как с русским языком подружить MS-DOS ?
https://www.cyberforum.ru/cpp-... 662-4.html
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2009, 17:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с текстом
Ребят дан текстовый файл(например лог.txt,всего тысяча строк), внутри такая структура: номер...

Работа с текстом...
Всем доброго времени суток ... Такая ситуация - загружаю через диалог в RichEdit1 - определённый...

Работа с текстом
Помогите мне написать методы для решения следующих целей. Дано сообщение: а) Вывести из него...

Работа с текстом
Всем привет! Помогите, пожалуйста, написать следующую программу: Программа с помощью прочитанного...


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

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

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