Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
pEntity
66 / 86 / 20
Регистрация: 12.12.2012
Сообщений: 1,020
#1

Vector - как сравнить записанные строки?

26.01.2014, 09:36. Просмотров 1239. Ответов 9
Метки нет (Все метки)

Здравствуйте.

C++
1
2
3
4
5
std::vector<std::string> g_Test;
 
g_Test.push_back("One");    
g_Test.push_back("Two");
g_Test.push_back("Three");
Есть строка: char *sTest;

Как проверить есть ли в моем контейнере строка схожая с sTest ?

Логично, что пройтись циклом по всему контейнеру и сравнить строки, но какой итератор использовать для вектора, ведь у меня строки:

C++
1
for( int i = 0; i <= g_WorldModels.size; i++)
А как далее сравнить g_Test с sTest ? По сути at, но я не могу всунуть в string, integer = g_WorldModels.at(i)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 09:36
Ответы с готовыми решениями:

Как сравнить двумерный vector?
Здравствуйте, подскажите, пожалуйста, как сравнить поэлементно двумерный...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>)
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b'...

Как сравнить строки?
Бобрый день. Подскажите пжалста, как можно сравнить строки без учета регистра...

Как сравнить строки?
я сравниваю строки если ввожу допустим 11111111 222222222 9 то программа...

Как корректно скопировать vector в vector внутри класса
Есть класс принимающий в конструкторе vector: class test { ...

9
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.01.2014, 09:45 #2
Преобразовать char* в std::string не судьба? А еще есть std::find
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
26.01.2014, 09:46 #3
C++
1
2
3
4
5
6
7
8
9
10
11
    std::vector<std::string> vs;
 
    vs.push_back( "one" );
    vs.push_back( "two" );
    vs.push_back( "three" );
 
    for ( std::vector<std::string>::iterator it = vs.begin(); it != vs.end(); ++it ) {
        if ( *it == "two" ) {
            std::cout << *it << std::endl;
        }
    }
1
pEntity
66 / 86 / 20
Регистрация: 12.12.2012
Сообщений: 1,020
26.01.2014, 09:49  [ТС] #4
castaway, спасибо большое. Скажите пожалуйста, а этот способ быстрей ли будет?

C++
1
2
3
4
5
    for( auto iter = g_WorldModels.cbegin(); iter != g_WorldModels.cend(); iter++ )
    {
        if ( *iter == "two")
            break;
    }
Помойму из С++ 11 вычитал, что данный способ лучше.
0
Croessmah
++Ͻ
14527 / 8289 / 1556
Регистрация: 27.09.2012
Сообщений: 20,353
Записей в блоге: 3
Завершенные тесты: 1
26.01.2014, 09:50 #5
Цитата Сообщение от pEntity Посмотреть сообщение
Помойму из С++ 11 вычитал, что данный способ лучше.
тогда уж
C++
1
2
3
for ( auto x: g_WorldModels )
   if ( x == "str" )
      ...
1
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
26.01.2014, 10:03 #6
C++
1
2
3
    auto it = std::find( vs.begin(), vs.end(), "two" );
    if ( it != vs.end() )
        std::cout << *it << std::endl;
Цитата Сообщение от pEntity Посмотреть сообщение
Помойму из С++ 11 вычитал, что данный способ лучше.
А что именно там было написано, почему он лучше?
1
pEntity
66 / 86 / 20
Регистрация: 12.12.2012
Сообщений: 1,020
27.01.2014, 08:03  [ТС] #7
А какой итератор нужен, чтоб узнать в цикле на каком я щас контейнере ?

x ведь хранит строку, а мне нужен номер.

?

castaway, введите в гугле for ( auto C++ и первая ссылка на хабре. Просто тут удаляют линк на другие ресурсы.

Просто удобней вобщем-то.

Добавлено через 21 час 51 минуту
C++
1
2
3
4
5
2
3
for ( auto x: g_WorldModels )
   if ( x == "str" )
      ...
Если строка совпала, как узнать под каким номером x ?
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.01.2014, 08:13 #8
Цитата Сообщение от pEntity Посмотреть сообщение
Если строка совпала, как узнать под каким номером x ?
Либо введите дополнительный счетчик, либо используйте сразу цикл по индексам (как в первом сообщении), а не через итераторы.
0
pEntity
66 / 86 / 20
Регистрация: 12.12.2012
Сообщений: 1,020
27.01.2014, 08:40  [ТС] #9
for( int i = 0; i <= g_WorldModels.size; i++)
? А как строку мою узнать?
0
Croessmah
++Ͻ
14527 / 8289 / 1556
Регистрация: 27.09.2012
Сообщений: 20,353
Записей в блоге: 3
Завершенные тесты: 1
27.01.2014, 08:48 #10
C++
1
2
3
4
5
    for ( std::vector<std::string>::size_type i = 0 ; i < vs.size(); ++i ) {
        if ( vs[i] == "two" ) {
            //...
        }
    }
1
27.01.2014, 08:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 08:48

Как сравнить две строки?
Написал программу но не проходит сравнение вот это сравнение: bool...

Как сравнить строки в многомерном массиве?
Мне нужно сравнить строки в многомерном массивы и вывести количество...

Как сравнить две строки типа string?
C типом char все просто. Поиск по Фамилии и имени. char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru