Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
#1

Найти строку в другой строке - C++

19.07.2011, 16:35. Просмотров 1443. Ответов 9
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
 
 
int main() {
  string t("Jon"), v("Kon");
  t += v;
  string::iterator r;
  r = find(t.begin(),t.end(),"Kon");
  cout << *r;
  return 0;
}
Должно походу вернуть итератор на "K" алгоритм find. Что здесь не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2011, 16:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти строку в другой строке (C++):

найти некоторую строку в другой строке, не оканчивающейся \0 - C++
мапю текстовый файл в память. нужно в нем найти некоторую строку, как бы это сделать ? Писать свою функцию не хотелось бы. P.S. на...

Перевод чисел в строку и прибавление к этой строке другой строки - C++
Есть 2 числа. Сначала мы переводим эти числа в char' ы. Потом нужно создать строку, которая будет состоять из &quot;число&quot;+&quot;число&quot;+&quot;константа&quot;. ...

Найти в файле самую длинную строку и переписать её в другой файл - C++
всем привет возник такой вопрос есть файл в который вносятся числа разного количества. по этому есть несколько строк введённых чисел....

В каждой строке найти самое длинное слово и записать результат в другой текстовый файл - C++
В текстовом файле хранятся слова, разделенные пробелами. В каждой строке найти самое длинное слово и записать результат в другой текстовый...

Найти в каждой строке наибольший элемент и удалить строку с наименьшим элементом - C++
В каждой строке найти наибольший элемент. Из этих элементов найти наименьший и удалить ту строку, которой он принадлежит.

Найти во входной строке самую внутреннюю пару скобок {.} и переписать в выходную строку - C++
Помогите, пожалуйста, разобраться с кодом! Не могу понять, что делать дальше #include&lt;conio.h&gt; #include&lt;stdio.h&gt; char*...

9
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.07.2011, 16:38 #2
ElvenDragon, Ну может удосужитесь посмотреть сигнатуру find хотя бы?

Добавлено через 26 секунд
C++
1
2
template <class InputIterator, class T>
   InputIterator find ( InputIterator first, InputIterator last, const T& value );
При поиске в строке мы ищем только символ соответственно.
0
easybudda
Модератор
Эксперт CЭксперт С++
9717 / 5668 / 971
Регистрация: 25.07.2009
Сообщений: 10,911
19.07.2011, 16:47 #3
ElvenDragon, а чем Вам метод find из класса string не приглянулся?
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
19.07.2011, 16:48 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
{
    std::string FirstLine ( "Mr. Trololo!!!" ), SecondLine ( "ololo" );
    int position = FirstLine.find ( SecondLine );
    position < FirstLine.length() ? std::cout << position :
                    std::cout << "string is not found" << std::endl;
    std::cin.get();
    return 0;
}
0
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.07.2011, 16:49 #5
А если нужен итератор юзайте boost::find.
Ну или string::find() - и индекс прибавляете к началу - получаете итератор на нужный элемент.
0
An1ka
66 / 71 / 2
Регистрация: 30.06.2011
Сообщений: 176
19.07.2011, 18:15 #6
Алгоритм search ищет строку в строке и возвращает итератор:
http://www.cplusplus.com/reference/algorithm/search/
C++
1
2
3
4
5
6
7
8
int main() {
  string t("Jon"), v("Kon");
  t += v;
  string::iterator r;
  r =search ( t.begin(), t.end(), v.begin(), v.end());
  cout << *r;
  return 0;
}
0
ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
19.07.2011, 18:35  [ТС] #7
Цитата Сообщение от ForEveR Посмотреть сообщение
ElvenDragon, Ну может удосужитесь посмотреть сигнатуру find хотя бы?

Добавлено через 26 секунд
C++
1
2
template <class InputIterator, class T>
   InputIterator find ( InputIterator first, InputIterator last, const T& value );
При поиске в строке мы ищем только символ соответственно.
Удосужился. Просто Тип T это тип string и должно походу в качестве значения принимать строку. Как тип char к примеру там же символ можно принимать. Да и как тогда объяснить это? Вот пример.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <map>
using namespace std;
 
int main() {
  map <string, string> str21;
  str21.insert(pair<string, string> ("Jon", "03"));
  return 0;
}
Вот конструктор pair(const Ktype &k, const Vtype &v);
Тут значит можно принимать строку а там нельзя?)

Добавлено через 3 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
ElvenDragon, а чем Вам метод find из класса string не приглянулся?
Легче алгоритмы выучить и там больше возможностей чем учить каждую функцию член контейнера...
0
easybudda
Модератор
Эксперт CЭксперт С++
9717 / 5668 / 971
Регистрация: 25.07.2009
Сообщений: 10,911
19.07.2011, 18:51 #8
Цитата Сообщение от ElvenDragon Посмотреть сообщение
Просто Тип T это тип string и должно походу в качестве значения принимать строку.
Не, там как-раз символ char ищется в строке string. А к чему пример - вообще не понятно.
Цитата Сообщение от ElvenDragon Посмотреть сообщение
Легче алгоритмы выучить и там больше возможностей чем учить каждую функцию член контейнера...
Сомнительное утверждение. Если что-то нужно сделать с объектом определённого класса, почему бы то, что нужно, сначала среди методов этого класса не поискать? Да и зубрить ничего не обязательно - куча справочников перед носом. То, что часто используется, и так запомнится...
0
An1ka
66 / 71 / 2
Регистрация: 30.06.2011
Сообщений: 176
19.07.2011, 19:01 #9
Цитата Сообщение от ElvenDragon Посмотреть сообщение
Просто Тип T это тип string и должно походу в качестве значения принимать строку. Как тип char к примеру там же символ можно принимать.
При поиске используется проверка на равенство. Итератор указывает на элемент строки std::string, а этот элемент имеет тип char.
C++
1
2
3
  string::iterator it;
  (*it == "str"); // сравнение невозможно
  (*it == 's'); // сравнение возможно
1
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
19.07.2011, 19:29 #10
Цитата Сообщение от An1ka Посмотреть сообщение
При поиске используется проверка на равенство. Итератор указывает на элемент строки std::string, а этот элемент имеет тип char.
Да, при использовании операции "==" вызывается функция compare() из класса char_traits, а она уже сравнивает char'ы.
C++
1
static int compare ( const char_type* s1, const char_type* s2, size_t n);
0
19.07.2011, 19:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2011, 19:29
Привет! Вот еще темы с ответами:

Считать строку из файла и найти позицию заданного символа (непонятный символ в строке) - C++
Есть у меня вот такая вот строка 181x77х1 Лежит в файле. Я ее считываю и хочу найти позицию символа 'x' не получается. ...

Строка: Как найти в строке первый символ, который входит во другую заданную строку? - C++
Как найти в строке первый символ, который входит во другую заданную строку используя указатели и функции? Строки вводятся вручную.

Найти строку, содержащую минимальный элемент матрицы, и поменять в этой строке элементы 1-го и 4-го столбца - C++
Найти строку, содержащую минимальный элемент матрицы, и поменять в этой строке элементы 1-го и 4-го столбца. -7 -12 0 1 3...

Вывести строку, содержащую эти же слова, но расположенные в обратном порядке. Записать полученную строку в другой файл - C++
Доброго времени суток! Крайне необходима помощь экспертов в С++! Кто может - не оставьте меня в беде))) Вот задания: ...


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

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

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