Последнее слова в последовательности

  • Автор темы Kilin
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

Kilin

Гость
#1
Надо написать функцию которая будет выводит последнее слова.Первая строка должна содержать одну линию, что является не более 1000 знаков с пробелами и вывод должен быть только слова с большими буквами

Ввод
Qwerty usually test Buffalo
Вывод
BUFFALO
---------------------------------------------------------------------------------------------
Ввод
The you term the get with can ?
Вывод
CAN
 
F

flashkpi

Гость
#2
Если что пишите, сделаем
icq: 588002847
email: flash_1989@ukr.net
 
K

Kilin

Гость
#5
Код:
#include <iostream>

using namespace std;

int main()
{
int a;
char ch[1000];
cin.getline(ch,1000);

for (int i=0; i<strlen(ch); i++)
{
if (ch[i]==' ')
a=i;}
for (int i=a+1; i<strlen(ch); i++)
{
if (islower(ch[i]))
ch[i]=toupper(ch[i]);
if(isalpha(ch[i])) 
cout << ch[i];
}
cout<<" ";
return 0;
}
этот код правильный,но я хочу решить эту задачу если последовательность кончается на символы,то вывести последнее слова.
Например если ввести Can you can the can with can?,код работает правильно,а если ввести Can you can the can with can ?,код не работает
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#6
У меня такое предчувствие что твоя программа работает в корне не правильно. Попробуй введи "that that that and and".
 

DarkKnight

Well-Known Member
01.08.2010
653
0
33
Владивосток
#7
Лично я бы написал бы такое решение

C++:
#include <iostream>
#include <ctype.h>

using namespace std;

int main()
{
int a;
char ch[1000];
cin.getline(ch,1000);

strcpy(ch,strupr(ch)); //Переведем в верхний регистр

char buffer[128]; //Введем буферную переменную
memset(buffer,0,128); //Обнулим ее
char *pStr = buffer; //Введем указатель на буферную перемнную

int Max = 0; //Текущий максимум вхождений слова
char Result[128]; //Результирующее слово
for (int i=0; i<=strlen(ch);i++) //Обойдем всю строку и ее заверщающий символ
{
if (isspace((unsigned char)ch[i]) || iscntrl((unsigned char)ch[i])) //Если разделитель и управляющий символ (в нашем случае завершающий) то
{																  //usigned char - что бы русский язык понимали
int nMax = 0; //Введем промежуточный счетчик слов
char *ptrMax = ch; //Введем указатель на ch(искомую строку)
if (strlen(buffer)) //Длина буфера не нулевая (нулевой она может быть при подряд идущих разделителях
{
while (strstr(ptrMax,buffer)) //Пока есть входимость слова buffer(текущего) в строку на которую указывает ptrMax
{
ptrMax = strstr(ptrMax,buffer) + strlen(buffer); //Сдвиним указатель за первое вхождение buffer
nMax++; //Увеличим счетчик
}
if (nMax >= Max) //Сравним максимальное значение с текущим если больше либо равно перезапишим результат
{
Max = nMax;
strcpy(Result,buffer);
}
cout<<buffer<<" - "<<nMax<<endl; // Для отладки Слово - кол-во встречаимости
memset(buffer,0,128); //Обнулим буферную переменую
pStr = buffer; //Установим указатель на начало буфера
}
continue; //Выйдем из это итерации (продолжим цикл)
}
*pStr = ch[i]; //Посимвольно пишим символы в буфер из ch
pStr++; //Сдвиг указателя 
}

cout<<"Result : '"<<Result<<"' this word in "<<Max<<" count";
}
 
K

Kilin

Гость
#8
Ой ,я кажется перепутал задачу,надо найти последнее слова,а не слова встречаюшаяя больше всех,и если последовательность кончается на символы то все равно выводит посл. слова.Я решил задачу,но я еще решить если последовательность кончается на символы, и символ стоит отдельно.Мне нужен код который выводит последнее слова и для такой ситуации:The you term the ultra with can ? Код должен вывести CAN
 

DarkKnight

Well-Known Member
01.08.2010
653
0
33
Владивосток
#10
C++:
#include <iostream>
#include <ctype.h>

using namespace std;

int main()
{
int a;
char ch[1000];
cin.getline(ch,1000);

strcpy(ch,strupr(ch)); //Переведем в верхний регистр /* хотя для этой Задачи - это уже лишнее */

char buffer[128]; //Введем буферную переменную
memset(buffer,0,128); //Обнулим ее
char *pStr = buffer; //Введем указатель на буферную перемнную

char Result[128]; //Результирующее слово

for (int i = 0; i <= strlen(ch); i++) //Обойдем всю строку включая завершающий символ
{
if ((unsigned char)isalnum(ch[i])) //Если символ букво-циферный то
{
*pStr = ch[i]; //Посимвольно пишим символы в буфер из ch
pStr++; //Сдвиг указателя 
}
else if (strlen(buffer)) //Если же не буквенно-циферный и в buffer - что то есть то
{
strcpy(Result,buffer); //Скопируем из буфера в результат
memset(buffer,0,128); //Обнулим буферную переменную
pStr = buffer; //Установим указатель на начало буфера
}
}
cout<<"Result : '"<<Result<<"'"; //Выведим результат

}
 
K

Kilin

Гость
#11
Спасибо DarkKnight125!!
Оказывается мне cktletn польностью посмотреть биб-ку ctype
 
Статус
Закрыто для дальнейших ответов.