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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Количество символов и слов в векторе типа string 
:(
    Опции темы
wallstreet
Дата 3.3.2012, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Дообрый день.
Я открываю блокнот своим приложением из него весь текст построчно читаю в свой вектор "v". 
Задачи: 
1) посчитать кол-во символов в файле не учитывая пробелы;
2) посчитать кол-во слов в файле.

пытаюсь символы считать так:
Код

unsigned _stdcall Thread2(void *param)
{
    WCounter = 0;
    EnterCriticalSection(&fs);
    for(it=v.begin(); it<v.end(); ++it)
        WCounter++;
    LeaveCriticalSection(&fs);
    InvalidateRect((HWND)param, NULL, 1);
    return 0;
}


переменная WCounter = 1 в файле с текстом:"Hello world!"

Наведите на мысль плз.

Это сообщение отредактировал(а) wallstreet - 3.3.2012, 15:20
PM MAIL   Вверх
boostcoder
Дата 3.3.2012, 16:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(wallstreet @  3.3.2012,  15:20 Найти цитируемый пост)
for(it=v.begin(); it<v.end(); ++it)
        WCounter++;

жестоко.
у вектора есть метод size()

Добавлено через 7 минут и 34 секунды
Цитата(wallstreet @  3.3.2012,  15:20 Найти цитируемый пост)
весь текст построчно читаю в свой вектор "v"

страшно представить как это реализовано)
PM WWW   Вверх
wallstreet
Дата 3.3.2012, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



boostcoder, благодарю за ответ. Только size() разве не выдаст результат с пробелами?
и как с ее помощью посчитать кол-во слов?
Ну и вообще не получается  все равноо.





кстати я знал об этом методе, если б он удовлетворял потребностям вопрос был бы для меня неактуален*(

Это сообщение отредактировал(а) wallstreet - 3.3.2012, 16:29
PM MAIL   Вверх
boostcoder
Дата 3.3.2012, 16:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(wallstreet @  3.3.2012,  16:28 Найти цитируемый пост)
size() разве не выдаст результат с пробелами?

выдаст.
но твой делает ровно то же.

Добавлено через 11 минут и 14 секунд
http://liveworkspace.org/code/4f7f522c592a...5711a0cbbbe5f0d
PM WWW   Вверх
boostcoder
Дата 3.3.2012, 16:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(boostcoder @  3.3.2012,  16:31 Найти цитируемый пост)
http://liveworkspace.org/code/4f7f522c592a...5711a0cbbbe5f0d 

функцию mypred удали.
PM WWW   Вверх
wallstreet
Дата 3.3.2012, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



чисто логически я понимаю, что должен перебрать каждый элемент вектора и проверить его на ' ' (space).
что касается массивов то тут бы вопросов скорее всего не возникло бы. А как быть с вектором не знаю.
Насколько я понимаю надо делать каким - то методом итератора. Но каким не знаю.
Потому что очень хочется делать как-то так, но треть чувство подсказывает что все должно быть проще:
Код

for(int i=0; i<(v.end()-v.begin()); i++)
    {
        if(it[i]!=' ')
            WCounter++;
        else 
            WCounter--;
    }

тем более компилятор ругается на оператор !=

Добавлено через 6 минут и 31 секунду
Код

for(it=v.begin(); it<v.end(); ++it)
    {
        if(*it!=' ')
            ++WCounter;
        else 
            --WCounter;
    }


ругается на оператор !=
PM MAIL   Вверх
boostcoder
Дата 3.3.2012, 17:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(wallstreet @  3.3.2012,  16:56 Найти цитируемый пост)
А как быть с вектором не знаю.

вопрос в чем?

Цитата(wallstreet @  3.3.2012,  16:56 Найти цитируемый пост)
компилятор ругается на оператор !=

мне нужно угадать что компилятор пишет?
PM WWW   Вверх
wallstreet
Дата 3.3.2012, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2    IntelliSense: no operator "!=" matches these operands    c:\users\андрей\documents\visual studio 2010\projects\homework6.4\homework6.4\homework6.4.cpp    170    9    HomeWork6.4
Error    1    error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable conversion)    c:\users\андрей\documents\visual studio 2010\projects\homework6.4\homework6.4\homework6.4.cpp    170    1    HomeWork6.4

Добавлено через 1 минуту и 32 секунды
вот так объявлены вектор с итератором
Код

std::vector<std::string> v;
std::vector<std::string>::iterator it;

PM MAIL   Вверх
boostcoder
Дата 3.3.2012, 18:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



так у тебя же вектор строк, а не символов.
PM WWW   Вверх
wallstreet
Дата 3.3.2012, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ну да, в этом то и дело.
а как разбить строки по символам?
PM MAIL   Вверх
boostcoder
Дата 3.3.2012, 18:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Код

#include <vector>
#include <string>

int main() {
   std::vector<std::string> v;
   
   std::size_t res = 0;
   std::vector<std::string>::const_iterator vit = v.begin();
   for ( ; vit != v.end(); ++vit ) {
      std::string::const_iterator sit = vit->begin();
      for ( ; sit != vit->end(); ++sit ) {
         if ( *sit != ' ' ) ++res;
      }
   }

}

http://liveworkspace.org/code/46b87509e3f6...fab00a6374a09e0
PM WWW   Вверх
wallstreet
Дата 3.3.2012, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



boostcoder    Спасибо за помощь!
PM MAIL   Вверх
wallstreet
Дата 3.3.2012, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Только вот вопрос с подстчетом слов для меня остается открытым.
Если не сложно, укажите как можно строку распарсить плз.
PM MAIL   Вверх
boostcoder
Дата 3.3.2012, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Код

#include <vector>
#include <string>
#include <sstream>

int main() {
   std::vector<std::string> v;
   
   std::size_t res = 0;
   std::string tmp;
   std::vector<std::string>::const_iterator vit = v.begin();
   for ( ; vit != v.end(); ++vit ) {
      std::istringstream is(*vit);
      while ( is >> tmp ) { ++res; }
   }

}


код не проверял. возможны опечатки.
PM WWW   Вверх
wallstreet
Дата 4.3.2012, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Работает норм.
Спасибо еще раз.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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