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

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.82
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
21.04.2012, 20:09     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #1
Есть код №1. Он выводить на экран позицию нужного мне слова (только если в середине 1 слово а не 2 и больше например только "privet". А когда "privet kak dela" - он не хочет работать), которое я ищу в самом контейнере. Каким образом можно сделать такое, только из контейнером set и не 1 слово в середине а несколько, хотя б 3. Позиция данного элемента нужна, что б по позиции вывести нужные мне слова в другом контейнере, того ж типа.
#1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    vector<string> v1;
    v1.push_back("privet");
    v1.push_back("kak");
    v1.push_back("dela");
    string value = "dela";
    vector<int> loc_list;
    vector<string>::iterator location = v1.begin();
    while(1)
    {
        location = find(location, v1.end(), value);
        if(location == v1.end()) break;
        loc_list.push_back(location - v1.begin());
        location++;
    }
    print(loc_list);
#2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    set<string> v1;
    v1.insert("privet, kak, dela");
    v1.insert("xrenovo, delau, kyrsak");
    string value;
        cin >> value;
    vector<int> loc_list;
    set<string>::iterator location = v1.begin();
    while(1)
    {
        location = find(location, v1.end(), value);
        if(location == v1.end()) break;
        loc_list.push_back(location - v1.begin());
        location++;
    }
    print(loc_list);
В теории код №2 должен работать, но не работает. Каким образом можно его исправить.

Или каким другим способом можно это все реализовать ???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2012, 20:09     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция
Посмотрите здесь:

Контейнер set C++
C++ STL set
Контейнер set C++
C++ STL контейнер set, вставка элементов
STL, контейнер set C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.04.2012, 00:04     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #2
второй код и компилироватся то не должен.
я вот не понял какую задачу вы решаете.

вот допустим у вас такие данные в сете:
set<string> v1;
v1.insert("11, 22, 33");
v1.insert("44, 44, 66");

далее вы вводите какое-то слово или что? можете указать? и что и в каком контейнере вы хотите получить после ввода этого слова?
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 00:16  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #3
Цитата Сообщение от DU Посмотреть сообщение
второй код и компилироватся то не должен.
я вот не понял какую задачу вы решаете.

вот допустим у вас такие данные в сете:
set<string> v1;
v1.insert("11, 22, 33");
v1.insert("44, 44, 66");

далее вы вводите какое-то слово или что? можете указать? и что и в каком контейнере вы хотите получить после ввода этого слова?
да ! так как "11, 22, 33" - это строка типа СТРИНГ я ввожу например в
string word;
cin >> word;

дальше я с помощью функ. find() начинаю искать во всех, что есть в контейнере данных совпадения, если нахожу, мне надо только 1-е совпадение, других не будет никак по моих данных, и когда найду, у меня будет позиция этого элемента и соответсвенно к данной позиции я выведу другое слов в другом контейнере по данной позиции.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.04.2012, 00:20     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #4
хотелось бы более конкретный кейс.
вот вы ввели в word слово 22. так?
при поиске в сете этой строки ничего не найдется. при поиске подстроки - найдется первый элемент сета. что должно происходить дальше?
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 00:32  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #5
Цитата Сообщение от DU Посмотреть сообщение
хотелось бы более конкретный кейс.
вот вы ввели в word слово 22. так?
при поиске в сете этой строки ничего не найдется. при поиске подстроки - найдется первый элемент сета. что должно происходить дальше?
нашел я этот элемент и все - СТОП. в итератор у меня инкрементируеться пока не пройдет по всем элементам, когда нахожу все break; должен бить и у меня в итераторе есть позиция элемента это типа как поиск линейный в массиве, нахожу элемент и всё ... в например int pos = (позиция элемента в массиве) и я уже вывожу в другом массиве элементы например cout << mas[pos] << endl;

это всё часть моего курсака, мне просто надо реализовать словарь анг-рус. слова должны быть в 2-х асц. кон. типу set

Добавлено через 3 минуты
вот мой другой код, который написал - мне кажется что он ну ппс тупо написан так как СТЛ начал изучать, точнее для курсака и всё ... в теории этот код должен работать норм но он у меня чуть чуть криво работает, сил уже нету думать завтра попробую дописать нормально

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
set< string > p;
    p.insert("privet kak dela");
    p.insert("horosho a y teba ?");
    p.insert("norm, delay kyrsak");
    p.insert("a tu cho tam mytish");
    p.insert("igrau na pianino");
 
    //string mytext = "kewa privet, kewa zasranec";
    string word;
    cin >> word;
 
    //int a = mytext.find(word);
    //cout << a << endl;
    int a;
    set<string>::iterator myPos;
    set<string>::iterator pos;
    for(pos = p.begin(); pos != p.end(); pos++) {
        string text = *pos;
        a = text.find(word);
        cout << text  << "\t" << a << endl;
        if(a)
        {
            myPos = pos;
        }
    }
 
    if(a)
    {
        cout << "\nyour word is : " << *myPos<< endl;
    }
    else 
    {
        cout << "\nyour word don't find.\n";
        cout << a << endl;
    }
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.04.2012, 00:48     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #6
Все равно вы криво пытаетесь объяснить то, что вам нужно. Вы описываете шаги того, что делаете, а т.к. эти шаги кривые - из этого описание и задача в целом непонятна. Поробуйте не в терминах стл компонент это объяснить, а более просто.

Например:
У вас есть два массива со словами на разных языках. Вы вводите слово и ищете позицию этого слова в первом массиве. Потом выводите слово, которое находится в такой же поциии, но во втором массиве.

Вот что меня сбивает столку из всего того, что есть в этом посте:
В сете вы храните строки из нескольких слов. Далее идет поиск какой-то введенной строки. Пусть это будет inputStr. Идет поиск целиком этой строки или строки в сете должны содержать введенную подстроку? Например в сете хранится "11, 22, 33", я ввел 22.
Что мне должен дать поиск в этом сете строки 22? Поиск неудачен, потому что "11, 22, 33" != "22" или удачен, потому что 22 - это подстрока того, что находится в первой позиции сета?
Допустим поиск удачен. Что далее должно проиходить с этой строкой "11, 22, 33", которая в первой позиции сета? (Вот это допущение для поиска подстрок в строках, которые в сете. Тогда непонятно, зачем пользоватся сетом, если все равно нужно обрабатывать каждый элемент сета и имеющаяся у класса сет функция поиска все равно не подходит)
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 01:06  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #7
Например:
У вас есть два массива со словами на разных языках. Вы вводите слово и ищете позицию этого слова в первом массиве. Потом выводите слово, которое находится в такой же поциии, но во втором массиве.

ДА

Вот что меня сбивает столку из всего того, что есть в этом посте:
В сете вы храните строки из нескольких слов. Далее идет поиск какой-то введенной строки. Пусть это будет inputStr. Идет поиск целиком этой строки или строки в сете должны содержать введенную подстроку? Например в сете хранится "11, 22, 33", я ввел 22.
Что мне должен дать поиск в этом сете строки 22? Поиск неудачен, потому что "11, 22, 33" != "22" или удачен, потому что 22 - это подстрока того, что находится в первой позиции сета?

И тут да, поиск будет удачен "22" будет подстрокой в "11, 22, 33" значение найденное и соотвественно позиция.

Сет чисел - єто пример просто.

У меня будет 2 контейнера : 1 для рус. слов другой для анг. например :

1 кон.
konteiner_ENG[0] {"cat, kot, coto"};
konteiner_ENG[1] {"horse, hors, KoHb"};

2 кон.
konteriner_RUS[0] {"кот, кошка, котяра"};
konteriner_RUS[1] {"конь, пегас, коняра"};

тоесть слово horse нашло в konteiner_ENG[1] {"horse, hors, KoHb"}; индекс тут 1 (но у меня будет не индекс а ИТЕРАТОР (позиция его))и оно выводить все слова (синонимы) из другого контейнера с индеком 1 konteriner_RUS[1] {"конь, пегас, коняра"};

то есть оба контейнера не обязательно должы быть связаны, а только выводить нужное мне значение по индексу, ну это я так понимаю .
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.04.2012, 02:27     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #8
ну может тогда вот так:

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
#include <map>
#include <string>
#include <algorithm>
#include <iostream>
 
typedef std::map<int, std::string> Map;
// Это мапина, в которой первый элемент - это ключ для строки.
// В разных мапинах строки с одни и тем же ключом считаются ассоциированными.
// Обработка происходит так: в ключевой мапине ищется строка, которая содержит в себе
// слово word. Если такая есть, берем ключ этой строки и ищем строку по этому ключу в
// ассоциативной мапине. Если по этому ключу есть что-то, то выводим то, что нашли.
 
void Process(const Map& keyMap, const Map& assocMap, const std::string word)
{
  std::cout << "-----------------------------------------------------" << std::endl;
  std::cout << "Processing of the '" << word << "' word:" << std::endl;
 
  Map::const_iterator keyIter = keyMap.end();
  for (Map::const_iterator it = keyMap.begin(), end = keyMap.end(); it != end; ++it)
  {
    if (std::string::npos != it->second.find(word))
    {
      keyIter = it;
      break;
    }
  }
 
  if (keyIter == keyMap.end())
  {
    std::cout << "The word is not found in key map." << std::endl;
    return;
  }
 
  Map::const_iterator assocIter = assocMap.find(keyIter->first);
  if (assocIter == assocMap.end())
  {
    std::cout << "The word is not found in associative map." << std::endl;
    return;
  }
 
  std::cout << assocIter->second << std::endl;
}
 
int main()
{
  Map eng;
  Map rus;
 
  eng[0] = "00, 11, 22";
  rus[0] = "xx, yy, zz";
 
  eng[1] = "33, 44, 55";
  rus[1] = "aa, bb, cc";
 
  Process(eng, rus, "11");
  Process(eng, rus, "44");
  Process(rus, eng, "aa");
  Process(rus, eng, "cc");
  Process(eng, rus, "xyz");
  Process(rus, eng, "xyz");
 
  return 0;
}
Полагаться на позиции в сетах нельзя. Сет автоматически сортирует содержимое согласно своему критерию сортировки. Если строка в ключевом сете находится в первой позиции, то это не значит что она находится в этой же позиции в ассоциированном сете.
Возможно прокатит контейнер (не ассоциативный, он в этом случае не такой эффективный, как последовательные) контейнер пары(строка, строка). Поиск в контейнере будет идти по первой (ключевой строке). Если она найдена - выводится вторая (ассоциативная). Но имхо такой подход менее гибкий.

Добавлено через 41 минуту
Все таки правильно искать полное совпадение слов. При поиске подстроки есть вероятность что попадется ненужное слово. При поиске слова пар может подойти паровоз. Вот переделал маленько, но суть осталась та же.

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
#include <map>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
 
typedef std::vector<std::wstring> Words;
typedef std::map<int, Words> Map;
 
std::wostream& operator << (std::wostream& out, const Words& words)
{
  std::copy(words.begin(), words.end(),
    std::ostream_iterator<std::wstring, std::wstring::value_type>(out, L", "));
  return out;
}
 
void Process(const Map& keyMap, const Map& assocMap, const std::wstring& word)
{
  std::wcout << L"-----------------------------------------------------" << std::endl;
  std::wcout << L"Processing of the '" << word << L"' word:" << std::endl;
  Map::const_iterator keyIter = keyMap.end();
  for (Map::const_iterator it = keyMap.begin(), end = keyMap.end(); it != end; ++it)
  {
    if (it->second.end() != std::find(it->second.begin(), it->second.end(), word))
    {
      keyIter = it;
      break;
    }
  }
 
  if (keyIter == keyMap.end())
  {
    std::wcout << L"The word is not found in key map." << std::endl;
    return;
  }
 
  Map::const_iterator assocIter = assocMap.find(keyIter->first);
  if (assocIter == assocMap.end())
  {
    std::cout << L"The word is not found in associative map." << std::endl;
    return;
  }
 
  std::wcout << assocIter->second << std::endl;
}
 
int main()
{
  Map eng;
  Map rus;
 
  Words words;
  words.push_back(L"11");
  words.push_back(L"22");
  words.push_back(L"33");
  eng[0] = words;
 
  // Предыдущее заполнение при желании можно было бы заменить на
  // eng[0] = SplitToWords(L"11, 22, 33");
 
  words.clear();
  words.push_back(L"xx");
  words.push_back(L"yy");
  words.push_back(L"zz");
  rus[0] = words;
 
  words.clear();
  words.push_back(L"33");
  words.push_back(L"44");
  words.push_back(L"55");
  eng[1] = words;
 
  words.clear();
  words.push_back(L"aa");
  words.push_back(L"bb");
  words.push_back(L"cc");
  rus[1] = words;
 
  Process(eng, rus, L"11");
  Process(eng, rus, L"44");
  Process(rus, eng, L"aa");
  Process(rus, eng, L"cc");
  Process(eng, rus, L"xyz");
  Process(rus, eng, L"xyz");
 
  return 0;
}
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 10:01  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #9
спасибо за код, конечно пользу извлеку, но код который я пишу а именно по ас. кон. SET для курсака, мне именно надо написать для кон. SET, точнее база слов должна там быть для рус. и анг слов соответственно.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
22.04.2012, 10:10     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #10
C++
1
v1.insert("privet, kak, dela");
Вставляется НЕ ТРИ элемента, а ОДИН. Потому и не работает. Оператор перечисления не может находиться внутри строки, т.к. внутри строки это всего лишь запятая.
Не тупи.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 10:26  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #11
Цитата Сообщение от Deviaphan Посмотреть сообщение
C++
1
v1.insert("privet, kak, dela");
Вставляется НЕ ТРИ элемента, а ОДИН. Потому и не работает. Оператор перечисления не может находиться внутри строки, т.к. внутри строки это всего лишь запятая.
Не тупи.
а почему один ?? это ж строка, тем более каким образом я потом свяжу эти слова если они будут находится по 1 слову на каждом итераторе и мне при поиску слова найдет позиции, но по этой позиции я не смогу уже вывести все например не ОБЯЗАТЕЛЬНО 3 слова в другом контейнере (которые будуть в 1 строке типа СТРИНГ)

Добавлено через 2 минуты
а вот и код, который мне вопше не нравится, точнее такой способ как я написал, но ОН РАБОТАЕТ ТАК КАК Я ХОЧУ, сделаю другую часть курсака скину сюда и покажу как я хотел чтоб это всё работало !

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
set< string > p;
    p.insert("cat cot cat");
    p.insert("big bag bog");
    p.insert("dog dag deg");
    p.insert("fyk fak fek");
    p.insert("byba baba bypa");
 
    while(true)
    {
    string word;
    cin >> word;
 
    int a;
    set<string>::iterator myPos;
    set<string>::iterator pos;
    for(pos = p.begin(); pos != p.end(); pos++) {
        string text = *pos;
        a = text.find(word);
        if(a >= 0)
        {
            myPos = pos;
            break;
        }
    }
 
    if(a >= 0)
    {
        cout << "\n\nyour word is : " << *myPos<< endl;
    }
    else 
    {
        cout << "\nyour word don't find.\n";
        cout << a << endl;
    }
    }
Добавлено через 5 минут
НО если в контейнере есть РУС. слова так как у меня выше АНГ то поиск не хочет работать =(((((((
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
22.04.2012, 10:46     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #12
Ты вставил строку "privet, kak, dela" и итератор вернёт эту строку целиком, а не по словам.


Цитата Сообщение от botasa Посмотреть сообщение
но ОН РАБОТАЕТ
Он не работает.
Цитата Сообщение от botasa Посмотреть сообщение
a = text.find(word); if(a >= 0)
Условие будет выполнено ВСЕГДА. Нужно сравнивать с string::npos. Это хоть и -1, но беззнаковое.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 10:56  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #13
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ты вставил строку "privet, kak, dela" и итератор вернёт эту строку целиком, а
мне и не надо чтоб он вернул мне строку, я использую функ. find для типа string когда нахожу слово я проверяю переменную а если слово найдено в ней будет 0 или выше числа. А ЕСЛИ не найдет оно повернет -1, в зависимости от позиции, тогда я просто итератору присваиваю другой итератор, на которой позиции мне нашло слово и всё ...
если не верите закиньте в компилятор код.

Подскажите если знаете как при вводе слов на рус. не выводило иероглифы, с кодировкой не лады
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
22.04.2012, 11:28     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #14
Цитата Сообщение от botasa Посмотреть сообщение
оно повернет -1
Оно не вернёт -1, потому что возвращамое значение беззнаковое. Т.е. это 0xFFFFFFFF и оно больше нуля.

Цитата Сообщение от botasa Посмотреть сообщение
мне и не надо чтоб он вернул мне строку,
Вот сам же говоришь, что не надо, а при этом возвращаешь строку... И зачем через запятую слова задаёшь? Кроме пустой траты байт это ничего тебе не даёт.
Функция find возвращает позицию в символах, а не в словах. А судя по заданию, тебе нужно заменить слово из одной строки, на слово из другой. Если слова в строках имеют разную длину, то сделать этого у тебя не получится при таком алгоритме.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 11:35  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #15
Цитата Сообщение от Deviaphan Посмотреть сообщение
Оно не вернёт -1, потому что возвращамое значение беззнаковое. Т.е. это 0xFFFFFFFF и оно больше нуля.
ну епт !!! я ж проверяю в МС ВИЖ. студио если не нашло возвращает -1, блин я че обманываю, сам сижу уже 3 раза проверял это ...

Вот сам же говоришь, что не надо, а при этом возвращаешь строку... И зачем через запятую слова задаёшь? Кроме пустой траты байт это ничего тебе не даёт.
Функция find возвращает позицию в символах, а не в словах. А судя по заданию, тебе нужно заменить слово из одной строки, на слово из другой. Если слова в строках имеют разную длину, то сделать этого у тебя не получится при таком алгоритме.

блин я уже тут вопще запутался ... нет я делаю курсак и мне не надо замены
вот че я делаю

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
22.04.2012, 11:55     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #16
А это что тогда за?
Цитата Сообщение от botasa Посмотреть сообщение
Позиция данного элемента нужна, что б по позиции вывести нужные мне слова в другом контейнере, того ж типа.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 12:08  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #17
Цитата Сообщение от Deviaphan Посмотреть сообщение
А это что тогда за?
ну я это понимаю как : есть 2 контейнера, я последовательно заливаю слова из файла в оба контейнера
например первая вставка контейнер АНГ слов "cat, cеt ,cyt" а в Рус. контейнер "кот, кет, кут " ну и так дальше. Потом делаю поиск в контейнер например в контейнере АНГ. ввожу слово cat оно в алгоритме моему начинает проверять вместимость контейнера, когда находит в другой итератор записывает итератор данной позиции на которой нашло совпадение, и соответственно к данному итератор я вывожу слова из контейнера РУС, так наоборот.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
22.04.2012, 12:14     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #18
Цитата Сообщение от botasa Посмотреть сообщение
возвращает -1
Вот прототип: size_t find ( char c, size_t pos = 0 ) const;
size_t - беззнаковое
Сравнивать нужно так
if( std::string::npos != find(...) )

Если тебе возвращается знаковое - выкинь свой компилятор.
Вот тебе код для тестирования компилятора:
C++
1
2
3
4
5
6
7
8
9
10
#include <string>
#include <iostream>
 
int main()
{
    std::cout << typeid( std::string::size_type ).name();
    std::cin.get();
 
    return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от botasa Посмотреть сообщение
"cat, cеt ,cyt" а в Рус. контейнер "кот, кет, кут "
В таком варианте ты вполне можешь и написать рабочую версию, т.к. длина слов совпадает. Но я ведь говорю о реальной ситуации, а не об этой гипотетической. Если слова будут разной длины (а так и будет), то нынешний алгоритм с поиском индекса буквы работать не будет.
"cat cet cyt" и "кошка кет кут" - и всё, ничего не работает.Если ты захочешь перевести второе слово, то вместо "кет" у тебя получится "а к". Т.е. тебе нужно искать не номер буквы, с которого начинается слово, а именно номер слова.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
22.04.2012, 12:18  [ТС]     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #19
у вас так
Сравнивать нужно так
if( std::string::npos != find(...) )

у меня так
a = text.find(word);
if(a >= 0)

ваш код я вижу первый раз, как он у вас работает я не знаю, но мой код даже если вы считаете что он не правильно написан он работает так как мне надо понимаете ?

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
В таком варианте ты вполне можешь и написать рабочую версию, т.к. длина слов совпадает. Но я ведь говорю о реальной ситуации, а не об этой гипотетической. Если слова будут разной длины (а так и будет), то нынешний алгоритм с поиском индекса буквы работать не будет.
"cat cet cyt" и "кошка кет кут" - и всё, ничего не работает.Если ты захочешь перевести второе слово, то вместо "кет" у тебя получится "а к". Т.е. тебе нужно искать не номер буквы, с которого начинается слово, а именно номер слова.
а давайте так я сейчас разберусь из кодировкой при работе с рус. слова и выводом их в консоль и если у меня вопше ничё не получится я прислушаюсь к вашему совету (хотя я не понимаю как оно у вас должно работать в контейнере SET и сам поиск по букве).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 12:23     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция
Еще ссылки по теме:

C++ контейнер set
Используя STL контейнер set заполнить массив C++
C++ Set из STL

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
22.04.2012, 12:23     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция #20
Цитата Сообщение от botasa Посмотреть сообщение
ваш код я вижу первый раз
Это не мой код, а код из MSDN. Как бы им лучше знать, как их класс правильно работает. Не находишь?
http://msdn.microsoft.com/en-us/library/efzty53k.aspx

Цитата Сообщение от botasa Посмотреть сообщение
if(a >= 0)
Выполняется ВСЕГДА, т.к. а ВСЕГДА больше нуля. (unsigned int)-1 больше нуля.
Yandex
Объявления
22.04.2012, 12:23     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция
Ответ Создать тему
Опции темы

Текущее время: 04:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru