Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/56: Рейтинг темы: голосов - 56, средняя оценка - 4.82
 Аватар для Ded_Vasilij
233 / 215 / 63
Регистрация: 01.09.2012
Сообщений: 2,103

Поменять местами первое и последнее слово в строке

04.11.2012, 21:33. Показов 11382. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задача:
поменять местами первое и последнее слово в строке.
проблема некорректно определяется конец первого слова.
код:

/*В строке поменяйте местами первое и последнее слова.
Слова разделяются группами пробелов, пробелы возможны в начале и в конце строки.*/
C++
1
2
3
4
5
6
7
8
9
10
11
char* swap(char* str)
{
    int fb = 0; //начало первого слова
    int fe = 0; //конец первого слова 
    for(fb = 0; str[fb] == ' ' && str[fb] != 0; fb++);  // определяем позицию начала первого слова
    cout<<"fb = " << fb << endl;    
    for(fe = fb;str[fe] != ' '; fe++); //определяем позицию конца первого слова
        /* считает на единицу больше чем нужно. Например "привет мир" fb=0 - нормально, fe = 6 - должно быть 5. ЧТО Я НЕ ТАК СДЕЛАЛ???*/
    int len = strlen(str);      
    return rez;
}
P.S. ОСТАЛЬНОЙ КОД Я САМ ДОПИШУ САМ
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2012, 21:33
Ответы с готовыми решениями:

Поменять местами первое и последнее слово в строке
Мне нужна помощь. Помогите сделать это задание Создать файл, в который записываются исходные данные. Поменять местами первое и последнее...

Поменять местами в строке первое и последнее слово
Ребят,помогите пожалуйста,с решением задачки,если не трудно...Собственно,задачка: Словом текста считается любая последовательность...

Поменять местами первое и последнее слово в строке
Доброе время суток. Как вы видите, у меня очередная проблема. На этот раз связанная со Си-строками. В программе #define...

6
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
04.11.2012, 21:37
все верно. он же вначале переходит на очередной символ, а потом его сравнивает с пробелом. на выходе получаете индекс пробела
0
 Аватар для Ded_Vasilij
233 / 215 / 63
Регистрация: 01.09.2012
Сообщений: 2,103
04.11.2012, 22:04  [ТС]
Цитата Сообщение от I.M. Посмотреть сообщение
все верно. он же вначале переходит на очередной символ, а потом его сравнивает с пробелом. на выходе получаете индекс пробела
И как с этим бороться? Уменьшать в следующем шаге на единицу? Или есть более разумный способ?
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
04.11.2012, 22:09
Ded_Vasilij, собственно, да, уменьшать на один. Пожалуй, самое простое решение
Можно, конечно, писать так
C++
1
for(fe = fb;str[fe+1] != ' '; ++fe);
но вы рискуете вылететь за границы строки. Т.е. надо либо проверять это дело, либо как-то гарантировать, что выхода за границу точно не будет
0
 Аватар для Ded_Vasilij
233 / 215 / 63
Регистрация: 01.09.2012
Сообщений: 2,103
10.11.2012, 09:24  [ТС]
и еще вопросик. попытался сделать вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int copysubstr(char* str, char* rez, int x1,int x2, int i)
{
    for(int j = x1; j < x2; i++,j++)
    {
        rez[i] = str[j];
    }   
    return i;
}
char* swap(char* str)
{
    int fb = 0;                                                             //начало первого слова
    int fe = 0;                                                             //конец первого слова
    for(fb = 0; str[fb] == ' ' && str[fb] != 0; fb++);                      // определяем позицию начала первого слова       
    for(;str[fe] != ' '; fe++);                                     //определяем позицию конца первого сллова        
    int len = strlen(str);          // считаем длину строки
    int kb = 0;
    int ke = 0;
    for (ke = len-1; str[ke] == ' '; ke--); 
    ke++;   
    for (kb = ke; str[kb] != ' '; kb--);    
    kb++;   
    char *rez = new char [len + 1]; 
    int i = 0;
    i = copysubstr(str,rez,0,fb,i); 
    rez[i]='\0';    
    i = copysubstr(str,rez,kb,ke,i);    
    rez[i]='\0';    
    //i++;
    int temp = kb-fe;
    
    i = copysubstr(str,rez,kb-fb,kb,i); 
    rez[i]='\0';    
    /*i = copysubstr(str,rez,fb,fe,i);  
    rez[i]='\0';
    i = copysubstr(str,rez,i,len,i);
    rez[i]='\0';*/  
    return rez;
}
только теперь с индексами не могу разобраться. если последнее слово длиннее первого, то уго просто затирает. Как быть?
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 16:19
Сдвигать всю строчку вперед на нужное количество позиций
т.е.
a bbb ccc
должно превратиться в
ccc bbb a
а не в
cccbb a??
0
 Аватар для Ded_Vasilij
233 / 215 / 63
Регистрация: 01.09.2012
Сообщений: 2,103
11.11.2012, 17:34  [ТС]
Ну примерно так. Чего-то я с индексами намутил. Подскажи, если не сложно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2012, 17:34
Помогаю со студенческими работами здесь

Поменять местами первое и последнее слово
Помогите решить задачу, используя строки. В заданном тексте (слова разделены пробелами) поменять местами первое и последнее слово.

Поменять местами первое и последнее слово в предложении
Собственно, задачка вроде легкая, но у меня нету никаких идей. С клавиатуры вводится символьная строка, надо поменять местами первое и...

Поменять местами первое и последнее слово в предложении
Дано предложение(водить с консоли). Поменять местами первое и последнее слово. Помогите пожалуйста

Поменять местами первое и последнее слово, найти слова-палиндромы
Объектно-ориентированное программирование. Разработать программу. В заданном тексте (слова разделяются пробелами) по требованию...

Дано предложение. Поменять местами его первое и последнее слово.
Дано предложение. Поменять местами его первое и последнее слово.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru