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

Поиск:

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


Шустрый
*


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

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



Задача. Упорядочить массив символьных строк по их длине, отфильтровав все строки, содержащие символы, отличные от русских букв.

Помогите разобрать с этими символьными строками не пойму ниче.
PM MAIL   Вверх
Acer
Дата 16.4.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

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



Код

#include <iostream>
#include <vector>
#include <windows.h>

void ssort(std::vector<std::wstring> &_arr){
    for ( int i = 0; i < (signed)_arr.size(); i++ ){
        for ( int j = (signed)_arr.size() - 1; j > i; j-- ){
            if ( _arr[j].size() < _arr[i].size() ){
                std::wstring temp = _arr[i];
                _arr[i] = _arr[j];
                _arr[j] = temp;
            }
        }
    }
}

bool isRuss(std::wstring &_in){
    for ( int i = 0; i < (signed)_in.size(); i++ ){
        if ( (signed)_in[i] < 0x0400 + 0x10 || (signed)_in[i] > 0x0440 + 0x0f ){
            return false;
        }
    }
    return true;
}

int main(int argc, char *argv[]){
    std::vector<std::wstring> array( 5 );
    array[0] = L"Привет, медвед";
    array[1] = L"медведпревед";
    array[2] = L"Hello world";
    array[3] = L"hello медвед";
    array[4] = L"тожерусскиебуквытут";

    ::ssort( array );

    for ( int i = 0; i < (signed)array.size(); i++ ){
        char s[array[i].size() * sizeof( wchar_t )];
        if ( !::isRuss( array[i] ) ) continue;
        ::CharToOemW( array[i].c_str(), s );
        std::cout << s << std::endl;
    }
    ::system( "pause" );
    return 0;
}


Это сообщение отредактировал(а) Acer - 16.4.2009, 17:51

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Test.exe 485,96 Kb
PM MAIL   Вверх
Acer
Дата 16.4.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

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



забыл. Не запустится без этой библиотеки:

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  mingwm10.dll 15,59 Kb
PM MAIL   Вверх
zim22
Дата 16.4.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Acer @  16.4.2009,  17:45 Найти цитируемый пост)
ssort( array );

Зачем вы свою сортировку реализовали? smile Чем не устраивает sort из <algorithm>?
Код

bool size_pred(const std::string &lhs, const std::string &rhs) {
  return lhs.size() < rhs.size();
}
std::sort(arr.begin(), arr.end(), size_pred);



--------------------
PM MAIL   Вверх
Acer
Дата 16.4.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

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



Цитата(zim22 @ 16.4.2009,  16:53)
Зачем вы свою сортировку реализовали? smile Чем не устраивает sort из <algorithm>?

Не знал о существовании таковой :-(
PM MAIL   Вверх
zim22
Дата 16.4.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Acer, теперь знаете. смайл smile


--------------------
PM MAIL   Вверх
Anikmar
Дата 16.4.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(zim22 @  16.4.2009,  18:09 Найти цитируемый пост)
Acer, теперь знаете. смайл  

Ну, как-то я тоже попытался поспорить с STL - у кого QSort быстрее... 
Я проиграл. 

PM MAIL ICQ   Вверх
Acer
Дата 16.4.2009, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

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



Цитата(Anikmar @ 16.4.2009,  20:30)
STL - у кого QSort быстрее...

Qt vs STL ? smile
PM MAIL   Вверх
zim22
Дата 17.4.2009, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Acer @  16.4.2009,  23:50 Найти цитируемый пост)
Qt vs STL ?

причём здесь QT? насколько я телепатически понял Anikmar - он имел ввиду просто алгоритм Quick Sort

Это сообщение отредактировал(а) zim22 - 17.4.2009, 06:23


--------------------
PM MAIL   Вверх
zim22
Дата 17.4.2009, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



вот мой вариант.
Код

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

bool russian_pred(std::string &str) {  
  static std::string russian(
    "йцукенгшщзхъфывапролджэячсмитьбюёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ");
  std::string::size_type pos = str.find_first_of(russian);
  if (pos != std::string::npos) {
    return true;
  } else {
    return false;
  }
}

void deleteRussianWords(std::vector<std::string> &vs) {
  std::vector<std::string>::iterator end_it =
    std::remove_if(vs.begin(), vs.end(), russian_pred);
  vs.erase(end_it, vs.end()); 
}

bool size_pred(const std::string &lhs, const std::string &rhs) {
  return lhs.size() < rhs.size();
}

int main()
{
  std::vector<std::string> vs;
  vs.push_back("Hello");
  vs.push_back("мОй");
  vs.push_back("dear");
  vs.push_back("друг");
  vs.push_back("how");
  vs.push_back("are");
  vs.push_back("ты?");

  deleteRussianWords(vs);
  std::sort(vs.begin(), vs.end(), size_pred);  
  std::copy(vs.begin(), vs.end(), std::ostream_iterator<std::string>(std::cout, " "));

  return 0;
}



--------------------
PM MAIL   Вверх
Bondleha
Дата 17.4.2009, 15:11 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А варианты  допустим strlen что то в этом духе. И организовать все через циклы.Просто чтобы мне легче было разбираться. я Такого чет не знаю с <algoritm>  только научили с <string >))))

Добавлено через 1 минуту и 48 секунд
и без Vector
PM MAIL   Вверх
zim22
Дата 17.4.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Bondleha @  17.4.2009,  15:11 Найти цитируемый пост)
А варианты  допустим strlen что то в этом духе

за деньги всё что угодно. 


--------------------
PM MAIL   Вверх
Acer
Дата 17.4.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

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



Bondleha, идею и варианты решения показали. Книгу в руки и вперед smile Все просто.
PM MAIL   Вверх
Bondleha
Дата 17.4.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем спасибо !!!!
PM MAIL   Вверх
Anikmar
Дата 17.4.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(zim22 @  17.4.2009,  06:22 Найти цитируемый пост)
причём здесь QT? насколько я телепатически понял Anikmar - он имел ввиду просто алгоритм Quick Sort

Почему телепатически? Разве в STL он не так называется? (Давно было, забыл уже...)  smile 
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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