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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2015, 16:54   #1
tisit
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 24
По умолчанию Некорректный поиск слов в строке

Нужно найти слово в вводимой строке. Но почему то последовательность одинаковых символов например "aa" воспринимает как отдельные символы, то есть вводим строку "аа а бб аа", в поле искомое слово вводим "аа" результат должен быть 2 раза, но будет выводит 5, оно посчитает все вхождения буквы а. С нормальными разносимвольными словами все в порядке. Каким образом можно доработать код, чтобы в обоих случаях правильно считало, а не только в одном случае
Код:
#include <cstring>
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(0,"");
    const int n = 1; //размер под слово
    const int k = 70; // размер под строку для поиска
    char str[k + 1], key[n + 1];        // строка и ключ для поиска
    int counter = 0;                    // счетчик
 
    cout << "Введите строку: ";
    cin.getline(str, sizeof(str)); // вводим строку
    cout << "Введите слово из строки которое нужно найти: ";
    cin.getline(key, sizeof(key)); // вводим слово для поиска
 
   
    for (char *p = strstr(str, key); p != NULL; p = strstr(p + strlen(key), key)) // пока не нашли очередное вхождение с последнего места остановки, увеличиваем счетчик
        counter++;
 
    cout << "Количество совпадений в тексте: " << counter << endl;
    system("pause");
    return 0;
}

Последний раз редактировалось tisit; 02.12.2015 в 16:58.
tisit вне форума Ответить с цитированием
Старый 02.12.2015, 16:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отладку делал? Как "р" себя ведет в цикле смотрел?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.12.2015, 17:30   #3
tisit
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Отладку делал? Как "р" себя ведет в цикле смотрел?
Домой приду, проверю. Мб придумаю что нибудь
tisit вне форума Ответить с цитированием
Старый 02.12.2015, 20:44   #4
tisit
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Отладку делал? Как "р" себя ведет в цикле смотрел?
неправильный указатель при отладке
tisit вне форума Ответить с цитированием
Старый 03.12.2015, 03:21   #5
tisit
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 24
По умолчанию

сделал по другому(поскольку не знаю как решить проблему), теперь строка разбивается в столбец, как его обработать?
Код:

#include <cstring>
#include <iostream>
using namespace std;

int main()
{
	setlocale(0,"");
	char key[80];
	int counter = 0;

	char str[] ="а аб а ба";
	char *pch;
	cout << "Разбиение\t" << str << "\tна" << endl;
	pch = strtok(str," ,.-");
	
	while ( pch != NULL)
	{
		cout  << pch << "\n";
		pch = strtok(NULL, " ,.-");
	}	
	
	
	system("pause");
	return 0;
}
tisit вне форума Ответить с цитированием
Старый 03.12.2015, 09:54   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Могу я порекомендовать такой алгоритм?:
Код:
	string s="аа а бб аа";
	int cnt=0,i;
	for(i=s.find("аа");i!=string::npos;i=s.find("аа",i+1)) cnt++;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.12.2015, 23:22   #7
tisit
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Могу я порекомендовать такой алгоритм?:
Код:
	string s="аа а бб аа";
	int cnt=0,i;
	for(i=s.find("аа");i!=string::npos;i=s.find("аа",i+1)) cnt++;
так точно, спасибо
tisit вне форума Ответить с цитированием
Старый 04.12.2015, 10:26   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пожалуйста )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск слов в строке С# mashkmashk Помощь студентам 0 20.04.2013 19:46
(С++) поиск слов в строке, которые повторяются КРИЖ Помощь студентам 0 13.12.2012 19:25
string поиск слов в строке SAMOUCHKA Общие вопросы C/C++ 1 18.05.2012 01:15
Поиск слов в строке Neymexa Общие вопросы C/C++ 3 16.12.2008 18:33