Програма на С++ Ввести с клавиатуры строку символов и перевернуть каждое четное слово в строке.
Ввести с клавиатуры строку символов и перевернуть каждое четное слово в строке.
Помогите написать програму на с++

  • #include
    #include
    #include
    #include

    //Функция разворачивает символы между указателями begin и end
    void reverse(char *begin, char *end)
    {
    //Двигаемся с краев (от begin и от end) к центру, меняя местами крайние символы
    while (begin < end)
    {
    char c = *begin;
    *begin = *end;
    *end = c;
    ++begin; --end;
    }
    }

    //Функция возвращает true, если символ c является пробельным симолом
    bool is_space(char c)
    return c == ' '

    void main()
    {
    char str[1024]; //в этот массиве символов будет размещена строка

    //Получение строки:
    printf("Input string:\n");
    gets(str);

    //Перевертывание четных слов.
    //Слово - любая непрерывная последовательность непробельных символов.
    //То есть таких символов, для которых is_space вернет false.
    //Слово может состоять из одного символа.
    char *pos = str; //текущий символ
    char *begin = NULL, *end = NULL; //указатель на первый и на последний символы слова
    int words_count = 0; //количество слов (нужно для опрделения четности слова)

    //Последовательный перебор символов строки
    while (*pos)
    {
    //Если начало слова еще не обнаружено и текущий символ не является пробельным, то
    //это начало слова. Запоминаем его.
    if (!begin && !is_space(*pos))
    {
    begin = pos;
    }

    char next = *(pos + 1); //определение символа следующего за текущим
    //Если этот символ пробельный или конец строки, то это конец слова.
    //Запоминаем этот символ.
    if (begin && (is_space(next) || 0 == next))
    {
    end = pos;
    }

    //Если у нас есть и начало, и конец слова, то:
    if (begin && end)
    {
    //Увеличим количество слов и проверим четное ли слово
    if (++words_count % 2 == 0)
    {
    //Если слово четное - развернем его
    reverse(begin, end);
    }

    //Сбросим указатели на начало и конец слова
    begin = end = NULL;
    }

    ++pos; //сдвиг текущего символа
    }

    //Вывод результата:
    printf("Result:\n%s\nPress any key to end...", str);
    _getch();
    }

  • Какие есть наработки?
    Классы
    std::vector
    std::string
    к вашим услугам! ) А с переворотом слова вам поможет стандартный алгоритм reverse:

    http://www.cplusplus.com/reference/algorithm/reverse/

  • #include
    #include
    #include
    using namespace std;
    #define MaxWd 30
    #define MinWd 20
    int main()
    { char c;
    int j,i,b,k,LW,MW,v,w;
    srand(time(NULL));
    int P=rand() % (MaxWd-MinWd) + MinWd;
    MW=log(float(RAND_MAX))+2;
    char *p=new char[(MaxWd+5)*MW];
    for(k=i=0;i-P;i++)
    {
    for(LW=MW-log(float(rand())),j=0;j-LW;j++) p[k++]=char(rand() % ('z'-'a')+'a');
    for(v=4-log10(float(10+rand() % 990)),j=0;j-v;j++) if(w=rand() % 100) if(w<10) p[k++]='\t'; else p[k++]=' '; else p[k++]=0x0D,p[k++]=0x0A;
    }
    p[k]=0;
    cout << "исходный текст: " << p << endl << endl;
    for(v=b=j=0;p[++j];)
    {
    if(p[j] > '@'&&p[j-1] < '@') b=j;
    if(p[j] < '@'&&p[k=j-1] > '@') if(v++&1) for(i=0;i<=(k-b)/2;c=p[k-i],p[k-i]=p[b+i],p[b+i]=c,i++);
    }
    cout << "результирующий текст: " << p << endl ;
    delete [] p;
    return 0;
    }

Вас заинтересует