Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2018, 12:14   #1
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию Строки.

Здравствуйте!
Надо посчитать количество повторов в строке определённого слова. Используя find() нахожу только первое. Далее в цикле он не хочет искать с позиции найденного. (Ну так ведь на вход метода идут те же данные. (Сначала я этого признавать не хотел))).
Есть варварский вариант осекать от строки всё до найденного слова плюс размер слова, и искать дальше (str.erase(x,e).
Хотелось бы узнать, есть ли более цивилизованное решение. Т.е. как для find фиксировать позицию от которой начинать новый поиск.
На Вики нет таких данных.
KAMLS вне форума Ответить с цитированием
Старый 22.09.2018, 12:21   #2
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Может сделать из неё массив и сравнивать по ячейкам?
KAMLS вне форума Ответить с цитированием
Старый 22.09.2018, 12:28   #3
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Может заменять на равновесное слово не совпадающее символами?
Но это всё равно всё варварство.
KAMLS вне форума Ответить с цитированием
Старый 22.09.2018, 12:49   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну так задавайте второй параметр в цикле для find, сначала 0, потом i, потом i2,..
p51x вне форума Ответить с цитированием
Старый 22.09.2018, 13:08   #5
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Я сделал так. Но выдает только одно слово, хотя в тестовом вводе я делаю три.
Код:
getline(cin, str1);
	int x=-1, y=0, c=0;
	cout << "Ввод искомого слова.\n";
	getline(cin, str2);
	x = str1.find(str2,y);
	while (x < str1.size())
	{
		if (y == x && c == 0)
			c++;
		else
			if (y < x)
			{
				c++;
			    y = x;
			    x = str1.find(str2,y);
				cout << c;
			}
			else break;
	}
KAMLS вне форума Ответить с цитированием
Старый 22.09.2018, 13:13   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. Результат find надо сравнивать с npos
2. Ну так у вас логическая ошибка. Возьмите листок напишите АББАББА и поищите по вашему алгоритму ББ. Вы же не двинетесь дальше первого вхождения, т.к. всегда с него вы и искать начинаете.
p51x вне форума Ответить с цитированием
Старый 22.09.2018, 13:19   #7
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Я и так уже знаю что дальше первого вхождения не двигаюсь. Знаю, что где-то что-то не то. Но пока не знаю где.
Мыслю так:
при поиске через find ставится позиция равная y.
*ляяя уже понял, надо добавлять к ней длину строки поиска..)))
KAMLS вне форума Ответить с цитированием
Старый 22.09.2018, 13:21   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну или хотя бы 1...)
p51x вне форума Ответить с цитированием
Старый 22.09.2018, 13:26   #9
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Спасибо.
KAMLS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти строки матрицы, для которых есть коллинеарные строки DowL_HH4 Общие вопросы C/C++ 1 27.04.2018 12:50
Выводить только измененные строки. Перед каждой строкой записывать номер строки в исходном тексте.используя строки и текст.файл nero4ka C++ Builder 1 13.06.2015 07:14
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10