Поиск подстроки в предложении, выделенной определенной комбинацией символов
Допустим у нас есть строка:
Мы с мамой пошли в парк им. Горького, а потом катались там на каруселях.
Необходимо вывести слово,которое расположено между "." и "," именно в таком порядке,т.е.в промежутке между "," и "." не годится, причем оно должно всегда начинаться с большой буквы,а точки в предложении могут быть расставлены еще и в произвольных местах.Допустим так:
Мы .с Мам.Ой пош.ли в. Па.р.к Им. Горького, а Пото.м ка.тал.ись там на. кАрусе.лях.
Таким образом, в результате и там,и там будет слово "Горького".
Подскажите пожалуйста как это можно реализовать. Спасибо!
Код:
#include <vcl.h>
#include <locale.h>
#include <stdio.h>
#include <ctype.h>
wchar_t* strbetw(const wchar_t* s, const wchar_t*& e);
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "Russia");
wchar_t s[] = L"Мы .с Мам.Ой пош.ли в. Па.р.к Им. Горького,"\
L" а Пото.м ка.тал.ись там на. кАрусе.лях.";
WideString str;
const wchar_t* a, *b;
a = strbetw(s, b);
if(a != NULL) {
// сохраняем слово
str = WideString(a, b - a);
_putws(str.c_bstr());
//выводим в консоль
while(a != b)
wprintf(L"%lc", *a++);
}
getchar();
return 0;
}
wchar_t* strbetw(const wchar_t* s, const wchar_t*& e) {
const wchar_t* p, *t;
for(p = NULL; *s; ++s) {
if(*s == L'.')
p = s;
else if((*s == L',') && p) {
for(++p; (*p) && (! iswalpha(*p));++p);
if(iswupper(*p)) {
for(t = p; *t && iswalpha(*t); ++t);
e = t;
return (wchar_t*)p;
}
p = NULL;
}
}
return NULL;
}
#include <locale.h>
#include <stdio.h>
#include <ctype.h>
wchar_t* strbetw(const wchar_t* s, const wchar_t*& e);
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "Russia");
wchar_t s[] = L"Мы .с Мам.Ой пош.ли в. Па.р.к Им. Горького,"\
L" а Пото.м ка.тал.ись там на. кАрусе.лях.";
WideString str;
const wchar_t* a, *b;
a = strbetw(s, b);
if(a != NULL) {
// сохраняем слово
str = WideString(a, b - a);
_putws(str.c_bstr());
//выводим в консоль
while(a != b)
wprintf(L"%lc", *a++);
}
getchar();
return 0;
}
wchar_t* strbetw(const wchar_t* s, const wchar_t*& e) {
const wchar_t* p, *t;
for(p = NULL; *s; ++s) {
if(*s == L'.')
p = s;
else if((*s == L',') && p) {
for(++p; (*p) && (! iswalpha(*p));++p);
if(iswupper(*p)) {
for(t = p; *t && iswalpha(*t); ++t);
e = t;
return (wchar_t*)p;
}
p = NULL;
}
}
return NULL;
}
Большое спасибо! Однако,есть некоторые проблемы - во-первых это консольный вариант,а необходимо работать с визуальной средой - полями мемо,т.е. пользователь сам вводит текст,а ему выдается результат,нельзя написать эту конкретную фразу - это пример.
Цитата: Define2013
Большое спасибо! Однако,есть некоторые проблемы - во-первых это консольный вариант,а необходимо работать с визуальной средой - полями мемо,т.е. пользователь сам вводит текст,а ему выдается результат,нельзя написать эту конкретную фразу - это пример.
Вы просили подсказать, а в итоге хотите, чтобы всё сделали за вас. Не слишком ли жирно?