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

Использование vector<string> - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти сумму и произведение парных элементов http://www.cyberforum.ru/cpp-beginners/thread557138.html
Здравствуйте ! Кто то может по-шурику скинуть или написать программу: "Найти сумму и произведение парных элементов" Добавлено через 5 часов 19 минут Всё - уже позно! Но я зделав.
C++ Даны два числа Получить из этих строк новую строку, Помогите пожалуйста!! Даны два числа : N1 и N2 и две строки: S1 и S2. Получить из этих строк новую строку, объеденив N1 первых символов строки S1 и N2 послдених символов строки S2/ http://www.cyberforum.ru/cpp-beginners/thread557127.html
C++ targetver.h: No such file or directory.
Подскажите пожалуйста что за трабл. во всех файлах компилятор Dev-C++ - выдаёт ошибку типа: Подскажите пожалуйста как от них избавиться и скомпилить программу
C++ Дана строка S и число N
Помогите пожалуйста, еще одна задачка с рубежки. Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы "."(точка). Добавлено через 54 минуты я нашел аналог на pascale var st: string; i, n: integer;
C++ Двумерный вещественный массив А и целые числа М (>1), N (>1) являются входными и выходными параметрами http://www.cyberforum.ru/cpp-beginners/thread557123.html
Пожалуйста помогите!! Описать функцию DellJ(A,M,N,I,J), удаляющую из матрицы А размера MxN строку и столбец, содержащие элементы А (Если i>M или j>N, то матрица не измениться).Двумерный вещественный массив А и целые числа М (>1), N (>1) являются входными и выходными параметрами , i и j входные параметры.Дана матрица А MxN и чмсла i,j. Применить к матрице А процедуру DellJ и вывести полученный...
C++ Удвоить каждое вхождение символа С в строку S Дана строка S и символ С. Удвоить каждое вхождение символа С в строку S. подробнее

Показать сообщение отдельно
Street1
Сообщений: n/a

Использование vector<string> - C++

24.04.2012, 12:59. Просмотров 1325. Ответов 2
Метки (Все метки)

Задание:
Задана строка S, содержащая не менее двух слов, и символ с. Составит новую строку S1 из слов строки S, в которых есть символ с, и новую строку S2 из слов строки S, в которых нет символа с. Учитывать порядок вхождения слов в строку. Входные данные: строка S произвольной длины и символ с. Для решения задачи использовать столько процессов, сколько слов в строке.

Собственно задача решена, но я наткнулся на проблему, при вводе строки в английской раскладке, проблем нет, а при вводе на русской раскладке, все слова определяются, так как будто во всех есть искомый символ, хотя вводятся и иные=(

Подскажите пожалуйста, как можно исправить эту проблему?

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <string>
#include <stdio.h>
#include <ostream>
#include <vector>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/wait.h>
 
using namespace std;
 
#define MAX_WORDS   100     // Максимальное количество слов
#define BUF_SIZE    1024    // Максимальный размер входной строки
 
int shmid;                  // Для хранения дескриптора разделяемой памяти
int semid;                  // Для хранения дескриптора группы семафоров
sembuf Plus1 = {0, 1, 0};   // Операция прибавляет единицу к семафору с индексом 0
sembuf Minus1 = {0, -1, 0}; // Операция вычитает единицу от семафора с индексом 0
 
char searchChar;            // Искомый символ
vector<string> words;       // Вектор введенных слов
 
// Cтруктура, под которую будет выделена разделяемая память
typedef struct SHARED
{
    bool wordClass[100];    // Определяет тип слова
} *PSHARED;
 
PSHARED pShared;            // Указатель на разделяюмую память
 
// Разделяет строку на вектор подстрок, используя указанный разделитель
void SplitString(string &str, char separator, vector<string> &result)
{
    string::size_type first = 0;
    string::size_type second = str.find(separator);             // Определяет положение разделителя
 
    while (second != string::npos)                              // Пока найден разделитель
    {
        result.push_back(str.substr(first, second - first));    // Добавить подстроку между разделителями в вектор
        first = second + 1;
        second = str.find(separator, first);
    }
 
    result.push_back(str.substr(first));
}
 
// Функция, обрабатывающая слово
void ParseWord(int wordIndex)
{
    for (string::const_iterator i = words[wordIndex].begin(); i != words[wordIndex].end(); ++i) // Итерация по всем символам строки
    {
        if ((*i) == searchChar)                      // Если слово содержит искомый символ
        {   
            semop(semid, &Minus1, 1);                // Oтнять единицу от семафора
            pShared->wordClass[wordIndex] = true;    // Пометить слово как содержащее искомый символ
            semop(semid, &Plus1, 1);                 // Добавить единицу к семафору
            cout <<  words[wordIndex] << endl;
            break;
        }
    }
}
 
int main()
{
    // Запрос на создание разделяемой памяти для указателя
    shmid = shmget(IPC_PRIVATE, sizeof(struct SHARED), IPC_CREAT | 0666);
 
    // Eсли запрос оказался неудачным, завершить выполнение
    if (shmid < 0 )
    {
        cout << "Ошибка при выделении разделяемой памяти!" << endl;
        return -1;
    }
 
    // Cоздать группу семафоров, состоящую из одного семафора
    semid = semget(IPC_PRIVATE, 1, IPC_CREAT|0666);
 
    // Eсли не удалось создать группу семафоров, завершить выполнение
    if (semid < 0)
    {
        cout << "Ошибка при создании группы семафоров!" << endl;
        return -1;
    }
 
    semop(semid, &Plus1, 1);                  // Теперь семафор равен единице
    pShared = (PSHARED)shmat(shmid, NULL, 0); // Tеперь pShared указывает на выделенную разделяемую память
 
    // Чтение данных
    char szBuffer[BUF_SIZE];
    cout << "Введите строку:" << endl;
    cin.getline(szBuffer, sizeof(szBuffer) / sizeof(char));
    string buffer(szBuffer);
    SplitString(buffer, ' ', words);
 
    cout << "Введите символ:" << endl;
    cin >> searchChar;
 
    // Cоздать процессы-потомки
    for (int i = 0; i < words.size(); i++)
    {
        if (fork() == 0)    // Истинно для дочернего процесса
        {
            ParseWord(i);
            return 0;
        }
    }
 
    // Дождаться завершения процессов-потомков
    for (int i = 0; i < words.size(); i++)
    {
        wait(NULL);
    }
    // Формирование строк
    string withChar, withoutChar;
 
    for (int i = 0; i < words.size(); i++)
    {
        if (pShared->wordClass[i])
        {
            withChar += words[i] + ' ';
        }
        else
        {
            withoutChar += words[i] + ' ';
        }
    }
 
    cout << "Строка из слов с искомым символом: " << withChar << endl
         << "Строка из слов без искомого символа: " << withoutChar << endl;
 
    shmdt(pShared);
    shmctl(shmid, IPC_RMID, NULL);
    semctl(semid, IPC_RMID, NULL);
         
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru