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

Тема в разделе "C/C++/C#", создана пользователем Kilin, 2 ноя 2010.

Статус темы:
Закрыта.
  1. Kilin

    Kilin Гость

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

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

    flashkpi Гость

    Если что пишите, сделаем
    icq: 588002847
    email: flash_1989@ukr.net
     
  3. Kilin

    Kilin Гость

    Спасибо я уже решил задачку.Спасибо за советы и предложения!
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну если решил, то выложи.... Может кому-нибудь другому пригодится....
    Если конечно не сложно...
     
  5. Kilin

    Kilin Гость

    Код (Text):
    #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 ?,код не работает
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    У меня такое предчувствие что твоя программа работает в корне не правильно. Попробуй введи "that that that and and".
     
  7. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Лично я бы написал бы такое решение

    Код (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";
    }
     
  8. Kilin

    Kilin Гость

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну ты веселый парень ;-)))) Немного позже посмотрю тогда ;-)
     
  10. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (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<<"'"; //Выведим результат

    }
     
  11. Kilin

    Kilin Гость

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Пожалуйста.
    Ты понял, что именно из ctype.h я взял только isalnum()....

    Вот глянь еще задачку http://codeby.net/ipb.html?s=&sh...st&p=189000, что бы лучше понять принип, смыслы разные а реализация почти один в один....
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей