Loading...
Filipbg avatar Filipbg 26 Точки

Ultimate Reverse words

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <cctype>
using namespace std;

int main()
{
    string line;
    getline(cin, line);
    istringstream lineStream(line);
    string word;
    vector<string> wordsVec;
    while(lineStream >> word)
    {
        wordsVec.push_back(word);
    }
    for(vector<string>::iterator itBegin = wordsVec.begin(); itBegin != wordsVec.end(); ++itBegin)
    {
        for(vector<string>::iterator itEnd = wordsVec.end(); itEnd != wordsVec.begin(); --itEnd)
        {
            if(*itBegin == "," || *itBegin == "!" || *itBegin == ".")
                continue;
            if(itBegin->size() == itEnd->size())
            {
                swap(*itBegin, *itEnd);
            }
        }
    }
    for(int i = 0; i < wordsVec.size(); ++i)
    {
        string firstWord = wordsVec[0];
        if(islower(firstWord[0]))
            firstWord = toupper(firstWord[0]);

        string nextWords = wordsVec[i];
        for(int i = 0; i < nextWords.size(); ++i)
        {
            nextWords[i] = tolower(nextWords[i]);
        }
    }
    for(int i = 0; i < wordsVec.size(); ++i)
    {
        cout << wordsVec[i] << " ";
    }

    return 0;
}

Swap-ването не работи нормално, toupper и tolower немога да ги накарам да работят, а за punctuation marks нямам идея как да им запазя местата. Рових се в нета, но за конкретния пример не намерих solution

0
C++ Fundamentals 14/11/2019 18:14:41
j.petrov_90 avatar j.petrov_90 373 Точки
Best Answer

Привет, колега,

1№За такава задача и да искаш "не можеш" да навериш решение в нета.
Без значение дали задачата е тази или някой друга - подхода е винаги един и същи, а именно:
- разбиваш задачата на малки "смислени части"
- ако не можеш да намериш решението на някоя малка "смислена маст" - тогава търсиш за информация в нета.

Повярвай ми - винаги по този начин ще намираш каквото търсиш.

2) if(*itBegin == "," || *itBegin == "!" || *itBegin == ".")
За това (както и да всеки друг пунктуационен символ) си има готова функция - ispunct()

Относно toupper и toloower не ти работят, защото не си видял сигнатурата на функцията.
Виж какъв тип данни връща функцията.
След това виж в какво се опитваш да я присвоиш.

Поздрави!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.