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

Если в тексте есть одинаковые слова, заменить все их экземпляры символом из заданного набора - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция, которая удаляет начальные и конечные пробелы из строки http://www.cyberforum.ru/cpp-beginners/thread1179555.html
Написать функцию, которая удаляет начальные и конечные пробелы из строки, полученной в качестве аргумента Добавлено через 1 час 33 минуты Поможет кто с задачей, буду очень благодарен. Дублирование тем строго запрещено правилами форума.
C++ Найти строки матрицы с наибольшей и наименьшей суммой элементов Доброго времени суток! Если кто-то может, !!!ПОМОГИТЕ!!! с решением задачи (желательно подробно-детально, чтобы я мог разобраться, как в дальнейшем я мог бы составлять похожие проги). Задача: Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на экран найденные строки и суммы их элементов. http://www.cyberforum.ru/cpp-beginners/thread1179545.html
C++ С++
Задание Класс 1 «Координаты» (градусы широты, минуты широты, градусы долготы, минуты долготы): - конструкторы (по умолчанию, инициализация пользователем); - методы доступа. Класс 2 «Город» (название города, координаты (объект класса 1), население, год основания) - конструкторы (по умолчанию, инициализация пользователем);
C++ Функции работы с файлами через поток не работают! Подскажите ошибку?
int Write(House **massiv2, int *size2, int *size) { int i=0; ifstream file; char file_name = ""; printf("Type the file path\n"); getchar(); gets(file_name); file.open(file_name,ios::binary|ios::in);
C++ Программа для ввода и вывода фамилий и оценок студентов. Отберите тех, у которых сумма баллов вторая по вел http://www.cyberforum.ru/cpp-beginners/thread1179531.html
Программа для ввода и вывода фамилий и оценок студентов. Отберите тех, у которых сумма баллов вторая по величине #include<stdio.h> #include<conio.h> struct Student { char fam; int mark; int filter;
C++ Дружественная функция. Класс Passport Создать класс Passport со следующими полями: -номер паспорта -фамилия (указатель на строку) Конструктор должен выделять память под строку, ориентируясь на длину введеной (переданной строки) Методы записи и считывания надо организовать в 2х версиях : - обычный public метод - дружественная функция (объект принимается по ссылке) подробнее

Показать сообщение отдельно
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
20.05.2014, 18:48     Если в тексте есть одинаковые слова, заменить все их экземпляры символом из заданного набора
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
 
int main()
{
    setlocale(LC_ALL,"RUSSIAN");
    char str[] = "Однажды идя домой я заметил свет исходящй из "
    "кустов и я был ошарашен тем что я увидел в кустах лежал крайне "
    "приметной раскраски шар затем подойдя к нему ближе что то меня "
    "коснулось и я проснулся оказалось это был сон";
    
    //Первое использование функции strtok(). В качестве указателя используем str.
    //Далее будем использовать NULL. Функция нужна для исключения запятых,
    //точек, скобок и т. д. В нашем случае только пробелы.
    char* p = std::strtok(str, " ");
    //Создаём вектор arr
    std::vector<std::string> arr;
    //Сохраняем лексемы (слова) в вектор
    while(p != NULL)
    {
        arr.push_back(p); //Сохраняем
        p = strtok(NULL, " "); //Переходим к следующей лексеме
 
    }
    
    //Первый символ
    int symbol = 1;
    //Булевые переменные для дальнейшей проверки
    bool check = false, exists = false;
    
    //Главный цикл. Элемент с его индексом (i) проверяется с последующими (j).
    for(int i = 0; i < arr.size(); i++)
    {
        for(int j = i + 1; j < arr.size(); j++)
        {
            //Этот цикл исключает замену символа если он уже заменил слово.
            for(int s = 1; s <= symbol; s++)
            {
                std::ostringstream convert;
                convert << s; //"Конвертация" int в string
                //Т.е. если на каком-то этапе мы попадаем на символ 1, 2 и.т.д.
                //мы должны предотвратить их замену на текущий символ.
                if(arr[i] == convert.str())
                {
                    exists = true; //Поэтому меняем значение exists на true
                    break;
                }
            }
            //Если exists = false и элемент с индексом i равен элементу с индексом j
            if(arr[j] == arr[i] && !exists) 
            {
                //заменяем его (элемент с индексом j) на текущий символ
                arr[j] = (((int)'0') + symbol); 
                check = true; //check меняем на true
            }
        }
        if(check) //Если check = true
        {
            //заменяем (элемент с индексом i) на текущий символ
            arr[i] = (((int)'0') + symbol); 
            symbol++; //"Меняем" символ
            check = false; //Возвращаем check значение false
        }
        exists = false; //Возвращаем exists значение false
    }
    
    //Печатаем результат
    for(int i = 0; i < arr.size(); i++)
        std::cout << arr[i] << " ";
    std::cout << "\n\n";
    
    system("pause");
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru