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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
ElvenDragon
 Аватар для ElvenDragon
3 / 8 / 1
Регистрация: 12.07.2009
Сообщений: 361
19.07.2011, 16:35     Найти строку в другой строке #1
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. Что здесь не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2011, 16:35     Найти строку в другой строке
Посмотрите здесь:

найти некоторую строку в другой строке, не оканчивающейся \0 C++
C++ Перевод чисел в строку и прибавление к этой строке другой строки
Дан текстовый файл, содержащий целые числа. В каждой строке этого файла найти сумму наибольшего и наименьшего элементов и записать их в другой C++
C++ Вывести строку, содержащую эти же слова, но расположенные в обратном порядке. Записать полученную строку в другой файл
Не работает код (программа считывает из файла строку, убирает лишние пробелы и записывает в другой файл строку, словами наоборот) C++
В каждой строке найти самое длинное слово и записать результат в другой текстовый файл C++
Найти в файле самую длинную строку и переписать её в другой файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7933 / 4715 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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 );
При поиске в строке мы ищем только символ соответственно.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
19.07.2011, 16:47     Найти строку в другой строке #3
ElvenDragon, а чем Вам метод find из класса string не приглянулся?
Mиxaил
 Аватар для Mиxaил
530 / 435 / 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;
}
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7933 / 4715 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.07.2011, 16:49     Найти строку в другой строке #5
А если нужен итератор юзайте boost::find.
Ну или string::find() - и индекс прибавляете к началу - получаете итератор на нужный элемент.
An1ka
65 / 70 / 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;
}
ElvenDragon
 Аватар для 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 не приглянулся?
Легче алгоритмы выучить и там больше возможностей чем учить каждую функцию член контейнера...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
19.07.2011, 18:51     Найти строку в другой строке #8
Цитата Сообщение от ElvenDragon Посмотреть сообщение
Просто Тип T это тип string и должно походу в качестве значения принимать строку.
Не, там как-раз символ char ищется в строке string. А к чему пример - вообще не понятно.
Цитата Сообщение от ElvenDragon Посмотреть сообщение
Легче алгоритмы выучить и там больше возможностей чем учить каждую функцию член контейнера...
Сомнительное утверждение. Если что-то нужно сделать с объектом определённого класса, почему бы то, что нужно, сначала среди методов этого класса не поискать? Да и зубрить ничего не обязательно - куча справочников перед носом. То, что часто используется, и так запомнится...
An1ka
65 / 70 / 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'); // сравнение возможно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2011, 19:29     Найти строку в другой строке
Еще ссылки по теме:

Найти строку, содержащую минимальный элемент матрицы, и поменять в этой строке элементы 1-го и 4-го столбца C++
Найти в каждой строке наибольший элемент и удалить строку с наименьшим элементом C++
C++ Строка: Как найти в строке первый символ, который входит во другую заданную строку?
Считать строку из файла и найти позицию заданного символа (непонятный символ в строке) C++
C++ Найти во входной строке самую внутреннюю пару скобок {.} и переписать в выходную строку

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4247 / 2779 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 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);
Yandex
Объявления
19.07.2011, 19:29     Найти строку в другой строке
Ответ Создать тему
Опции темы

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