• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

Kilin

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

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

DarkKnight

Ну если решил, то выложи.... Может кому-нибудь другому пригодится....
Если конечно не сложно...
 
K

Kilin

Код:
#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 ?,код не работает
 
L

lazybiz

У меня такое предчувствие что твоя программа работает в корне не правильно. Попробуй введи "that that that and and".
 
D

DarkKnight

Лично я бы написал бы такое решение

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

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

DarkKnight

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

Спасибо DarkKnight125!!
Оказывается мне cktletn польностью посмотреть биб-ку ctype
 
D

DarkKnight

Пожалуйста.
Ты понял, что именно из ctype.h я взял только isalnum()....

Вот глянь еще задачку link removed, что бы лучше понять принип, смыслы разные а реализация почти один в один....
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!