Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Работа с символьной строкой 
V
    Опции темы
Death_muse
Дата 24.11.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Люди добрые помогите написать следующую лабу: 
В символьной строке удалить все слова, буквы которых входят в неразрешенный набор символов.
Пытался сделать сам :
Вводил 2 символьных масива: один для ввода всех символов другой для запрещенных символов.
 дальше  написал алгоритм сравнения элемнтов двух массивов и вывода не совпавших символов, но почему-то прога не работает(
Извините что не могу пока вынести свой код проги

Это сообщение отредактировал(а) Death_muse - 25.11.2007, 17:09
PM MAIL   Вверх
likehood
Дата 25.11.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 12
Всего: 24



Цитата(Death_muse @  24.11.2007,  23:29 Найти цитируемый пост)
буквы которых входят в неразрешенный набор символов.

все буквы или хотя бы одна?
PM MAIL   Вверх
Death_muse
Дата 26.11.2007, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Хотя бы одна
PM MAIL   Вверх
likehood
Дата 26.11.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 12
Всего: 24



Особенность кода: пробелы перед/после удалённого слова не удаляются
Код

#include <iostream>
#include <algorithm>
#include <string.h>

int main()
{
    char str[201], illegalStr[201];
    std::cout << "Enter string:\n";
    std::cin.getline(str, 200);
    std::cout << "Enter string with illegal characters:\n";
    std::cin.getline(illegalStr, 200);
    const int len = strlen(illegalStr);

    char charMap[256];
    memset(charMap, 0, 256);

    for (int j=0; j<len; j++)
        charMap[illegalStr[j]] = 1;

    int i = 0;
    int str_Len = strlen(str);
    while (str[i] == ' ') ++i;
    int wordBegin = i;
    bool keepThisWord = true;
    
    for (; i<=str_Len; ++i)
    {
        if (str[i] != ' ' && str[i] != '\0')
        {
            if (wordBegin == -1)
                wordBegin = i;
            if (keepThisWord && charMap[str[i]] == 1)
                keepThisWord = false;
        }
        else if ( ! keepThisWord )
        {
            const int word_Len = i - wordBegin;
            for (int j=i; j<=str_Len; ++j)
                str[j-word_Len] = str[j];
            str_Len -= word_Len;
            i = wordBegin;
            wordBegin = -1;
            keepThisWord = true;
        }
        else {
            wordBegin = -1;
        }
    }

    std::cout << "New string: " << str << "\n";
    return 0;
}


Это сообщение отредактировал(а) likehood - 26.11.2007, 20:54
PM MAIL   Вверх
Death_muse
Дата 27.11.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



ОООО большое спасибо чел прям выручил первака, группе которого ничего не обхясняют на лекции (это чистой воды правда)
Токо вот одна просьба, так как нам на лекции ничо не объяснюят, можно следующие вопросы задать?:
что значит операторы:
std
coutn(вроде бы - это ввод символов?0)
cin
const
pool
 bool
И что значят эти сдвиги <<      >>?
Если есть возможность дай ссылку откуда ты узнал всю информацию для выполнения этой лабы
PM MAIL   Вверх
likehood
Дата 27.11.2007, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 12
Всего: 24



std:: - узазывает на пространство имен std (в этом пространстве имен объявлены все классы и функции стандартной библиотеки, чтобы не было конфликта имен). чтобы не писать везде этот префикс можно написать в начале программы using namespace std;
cout - стандартный поток вывода, << означает вывод в поток (на консоль). аналогично, cin >> - ввод с консоли.
тип bool - логический тип, принимает два значения - true и false (истина и ложь).

Для более подробной информации советую почитать хороший учебник по С++. У нас даже есть раздел по литературе/документации, там много ссылок на учебники в электронном виде. Для начала пойдет любой учебник.

удачи!
PM MAIL   Вверх
Death_muse
Дата 28.11.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



биг спс снова
PM MAIL   Вверх
Death_muse
Дата 2.12.2007, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



Likehood   вот токо одна спроблема с твоей прогой: она просто не работает, компилируется без проблем. Все ввожу одну строку со всеми символами, затем illegalstr , но прога вывовид первоначальную строку без изменений.
Пожалуйста исправь прогу снова
PM MAIL   Вверх
likehood
Дата 3.12.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 12
Всего: 24



напиши какие строки вводишь, чтобы проще было найти ошибку
PM MAIL   Вверх
Death_muse
Дата 4.12.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



после появления 1 надписи что нужно ввести общую строку я ввел: gkj glj dl
Затем после появления 2 сообщения я ввел: j k
И мне выводить прога: gkj dlj d

Добавлено через 7 минут и 9 секунд
 Кстати likehood я пытался понять твой алгоритм и единственное что я не понял  : это что за функция memset  и что значат её операнды и зачем нужен массив charmap?
PM MAIL   Вверх
likehood
Дата 4.12.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 12
Всего: 24



странно, у меня все работает (выводит dl). какой у тебя компилятор?

Цитата(Death_muse @  4.12.2007,  20:21 Найти цитируемый пост)
это что за функция memset

она служит для обнуления массива charMap, хотя можно было обойтись без нее, написав char charMap[256] = {0};
массив charMap исползуется для упрощения поиска неразрешенных символов (это видно из 17-18 строк).
PM MAIL   Вверх
Death_muse
Дата 5.12.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



спс значит у меня старая версия visual c++ все тему закрываю
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.