Другие языки программирования и технологии

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

Ввести с клавиатуры строку символов и перевернуть каждое четное слово в строке.
Помогите написать програму на с++
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <sstream>

//Функция разворачивает символы между указателями 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 == ' ' || c == '\t';
}

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();
}
Talap Berkaliyev
Talap Berkaliyev
454
Лучший ответ
#include <iostream>
#include <ctime>
#include <cmath>
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;
}
AB
Adrian Bernevec
76 473
Какие есть наработки?
Классы
std::vector
std::string
к вашим услугам! ) А с переворотом слова вам поможет стандартный алгоритм reverse:

http://www.cplusplus.com/reference/algorithm/reverse/
Вадим Акимов
Вадим Акимов
7 783

Похожие вопросы