Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
wolf1396
6 / 6 / 0
Регистрация: 07.05.2013
Сообщений: 213
#1

Напишите программу, переставляющую символы в строке в обратном порядке по заданному шаблоном виду - C++

07.06.2013, 13:06. Просмотров 2206. Ответов 26
Метки нет (Все метки)

Напишите программу, переставляющую символы в строке в обратном порядке по заданному шаблоном виду.
Выведите исходную и преобразованную строку на экран.
Вход: hello world!
Вывод: olleh !dlrow

как это сделать циклами?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2013, 13:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Напишите программу, переставляющую символы в строке в обратном порядке по заданному шаблоном виду (C++):

Переставить символы в строке в обратном порядке - C++
Добрый вечер. Помогите пожалуйста разобраться в программке. #include <iostream> #include <string> using namespace std; int...

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

Написать на С++ функцию, переставляющую в обратном порядке элементы в односвязном списке - C++
Здравствуйте, помогите пожалуйста Написать на С++ функцию, переставляющую в обратном порядке элементы в односвязном списке

Сколько букв останется на своих местах в данной строке, ес¬ли ее символы записать в обратном порядке - C++
Сколько букв останется на своих местах в данной строке, ес¬ли ее символы записать в обратном порядке c++ Добавлено через 5 часов 45...

Напишите программу, которая печатает на экране собственный исходный файл в обратном порядке - C++
Напишите программу, которая печатает на экране собственный исходный файл в обратном порядке. Помогите пожалуйста!!!

Напишите, скомпилируйте и выполните программу, которая выводит перечень аргументов командной строки в обратном порядке - C++
Задание Напишите, скомпилируйте и выполните программу, которая выводит перечень аргументов командной строки в обратном порядке. ...

26
wolf1396
6 / 6 / 0
Регистрация: 07.05.2013
Сообщений: 213
09.06.2013, 20:13  [ТС] #16
и все-таки, кто-нибудь даст внятный и простой ответ, как сделать циклами for и/или while перестановку символов в строке, а то варианты, которые даны, не очень то понятны, особенно с какими-то библиотеками
0
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 676
Регистрация: 29.11.2010
Сообщений: 12,328
09.06.2013, 20:22 #17
wolf1396, вам предоставили несколько работоспособных вариантов различного уровня сложности. Вот на чистых сях, до плюсов вы недоросли:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stddef.h>
#include <string.h>
#define SIZE 100
 
int main(void)
{
    char str[SIZE], *p;
    size_t len, pos;
    if (fgets(str, sizeof(str), stdin) == NULL || strlen(str) == 1)
        return 1;
    len = strlen(str);
    str[len - 1] = '\0';
    
    for (p = strtok(str, " "); p != NULL; p = strtok(NULL, " "))
    {
        for (pos = strlen(p); pos; pos--)
            printf("%c", p[pos-1]);
        printf("\n");
    }       
    
    return 0;
}
0
wolf1396
6 / 6 / 0
Регистрация: 07.05.2013
Сообщений: 213
09.06.2013, 21:19  [ТС] #18
Цитата Сообщение от MrGluck Посмотреть сообщение
wolf1396, вам предоставили несколько работоспособных вариантов различного уровня сложности. Вот на чистых сях, до плюсов вы недоросли:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stddef.h>
#include <string.h>
#define SIZE 100
 
int main(void)
{
    char str[SIZE], *p;
    size_t len, pos;
    if (fgets(str, sizeof(str), stdin) == NULL || strlen(str) == 1)
        return 1;
    len = strlen(str);
    str[len - 1] = '\0';
    
    for (p = strtok(str, " "); p != NULL; p = strtok(NULL, " "))
    {
        for (pos = strlen(p); pos; pos--)
            printf("%c", p[pos-1]);
        printf("\n");
    }       
    
    return 0;
}
я то может не дорос, но вот то, что предоставляете Вы, у меня не компилируется

а вот ошибка:
error C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
09.06.2013, 21:29 #19
Цитата Сообщение от wolf1396 Посмотреть сообщение
а вот ошибка:
error C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
попробуйте заменить strtok на strtok_s, как написано в ошибке:
Consider using strtok_s instead.
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
09.06.2013, 21:33 #20
Dragokas, вы уверены в том, что написали?
1) на hello world ваша программа выводиь olleh, а не то, что нужно;
2) как видно, этот человек со студии, а там может не скомпилиться void main, поэтому нужно int main;
3) где взялся strlen? cstring не подключен как. может это компилятора фича какого.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 676
Регистрация: 29.11.2010
Сообщений: 12,328
09.06.2013, 21:44 #21
Цитата Сообщение от wolf1396 Посмотреть сообщение
а вот ошибка:
error C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Либо мелкософт в край охренел, либо вы врете. Если честно, я склонен ко второму т.к. флаги компиляции вы пока вряд ли умеете править.
Если не стоит -Werror, то VS лишь кинет warning и скомпилит код. Ибо не имеют право они свою проприетарщину втюхиваь уж настолько явно. strtok_s - поделка, не входящая в стандарт. Единственная причина почему вы её видите - желание привязать вас к VS т.к. в любом нормальном компиляторе данная функция отсутствует.
Добавьте
C++
1
#define _CRT_SECURE_NO_WARNINGS
в начале кода и наслаждайтесь успешной компиляцией без ошибок и предупреждений.

Добавлено через 1 минуту
Цитата Сообщение от Dani Посмотреть сообщение
как видно, этот человек со студии, а там может не скомпилиться void main, поэтому нужно int main;
как раз единственное место, где скомпилится void main - это студия ибо на стандарты наплевать
0
wolf1396
6 / 6 / 0
Регистрация: 07.05.2013
Сообщений: 213
09.06.2013, 21:52  [ТС] #22
Цитата Сообщение от MrGluck Посмотреть сообщение
Кликните здесь для просмотра всего текста
Либо мелкософт в край охренел, либо вы врете. Если честно, я склонен ко второму т.к. флаги компиляции вы пока вряд ли умеете править.
Если не стоит -Werror, то VS лишь кинет warning и скомпилит код. Ибо не имеют право они свою проприетарщину втюхиваь уж настолько явно. strtok_s - поделка, не входящая в стандарт. Единственная причина почему вы её видите - желание привязать вас к VS т.к. в любом нормальном компиляторе данная функция отсутствует.
Добавьте
C++
1
#define _CRT_SECURE_NO_WARNINGS
в начале кода и наслаждайтесь успешной компиляцией без ошибок и предупреждений.

Добавлено через 1 минуту

как раз единственное место, где скомпилится void main - это студия ибо на стандарты наплевать
ага, я вру -_-
0
Миниатюры
Напишите программу, переставляющую символы в строке в обратном порядке по заданному шаблоном виду  
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 676
Регистрация: 29.11.2010
Сообщений: 12,328
09.06.2013, 22:03 #23
wolf1396, lol ну значит
Цитата Сообщение от MrGluck Посмотреть сообщение
мелкософт в край охренел
т.к. предназначение данной функции я вам рассказал. В VS2008, 2010 всегда было лишь как бульканье.
Переставьте дефайн _CRT_SECURE_NO_WARNINGS до всех инклюдов.

Или можно так:
Проект ->Свойства->Свойства конфигурации->C/C++ ->препроцессор ->определения препроцессора -> изменить -> в первом поле дописать _CRT_SECURE_NO_WARNINGS.
Добавлено через 5 минут
Ладно, вот вам плюсовый вариант (немного подкорректировал предыдущий)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstddef>
#include <cstring>
 
int main()
{
    const size_t size = 100;
    char str[size];
    // считываем строку с потока (до нажатия Enter)
    std::cin.getline(str, sizeof(str));
 
    // разделяем на подстроки до " ", записываем результат в p
    for (char *p = strtok(str, " "); p != NULL; p = strtok(NULL, " "))
    {
        // выводим подстроку с конца до начала (наоборот)
        for (size_t pos = strlen(p); pos; pos--)
            std::cout << p[pos-1];
        std::cout << "\n";
    }
}
0
Dragokas
Эксперт WindowsАвтор FAQ
16000 / 6817 / 821
Регистрация: 25.12.2011
Сообщений: 10,555
Записей в блоге: 16
09.06.2013, 22:10 #24
MrGluck, да в 2012 студии именно так, причем в 2010-й это считалось только как предупреждение.

Dani, неа, не уверен. Я то думал - такая фича. В VS2012 компилируется без доп. заголовочных файлов.
А я то как раз и вводил в консоль Hello. Лишние 5 букв - было лень.
Теперь понял, что strlen урезает проверку длины до первого пробела или еще как-то. Вообщем, ушел курить мануал.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 676
Регистрация: 29.11.2010
Сообщений: 12,328
09.06.2013, 22:17 #25
Цитата Сообщение от Dragokas Посмотреть сообщение
да в 2012 студии именно так
печально т.к. это еще один шаг в сторону от стандарта и попытка привязать пользователей к единственной IDE. На деле оснований запрещать strtok у них не было. Ведь даже для капабилити не оставили.

Добавлено через 3 минуты
Цитата Сообщение от Dragokas Посмотреть сообщение
Теперь понял, что strlen урезает проверку длины до первого пробела или еще как-то.
неправильно поняли. Дело в том, что обычное считывание в массив char идет до первого пробела или символа перевода строки. Для считывания всей строки до нажатия Enter необходима след. комбинация:
C++
1
2
cin.getline(str, sizeof(str)); // если str - char[]
getline(cin, str); // если str - string
Добавлено через 38 секунд
http://www.cplusplus.com/reference/string/string/getline/?kw=getline
http://www.cplusplus.com/reference/i...kw=cin.getline
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
09.06.2013, 22:19 #26
Dragokas, лучше почиать про cin: он же до whitespace считывает.

Добавлено через 26 секунд

Не по теме:

опоздал)



Добавлено через 1 минуту
про strlen и не говори, у меня при include iostream откуда-то abs берется.
1
wolf1396
6 / 6 / 0
Регистрация: 07.05.2013
Сообщений: 213
20.06.2013, 19:36  [ТС] #27
Кликните здесь для просмотра всего текста
Цитата Сообщение от Olivеr Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
template <typename Iter>
void reverse(Iter first, Iter last)
{
    while (first != last && first != --last) {
        std::swap(*first, *last);
        first++;
    }
}
 
int main()
{
    std::string str("12345");
    reverse(str.begin(), str.end());
    std::cout << str;
    return 0;
}
или так
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::string s = "Hello world!";
    std::copy( s.rbegin(), s.rend(), std::ostream_iterator<char>(std::cout) );
    return 0;
}


если сделать std::reverse(...);
то скомпилируется все ок и даже запуститься
thank you
0
20.06.2013, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2013, 19:36
Привет! Вот еще темы с ответами:

Если в A есть символы из B и в B нет повторяющихся символов, то упорядочить символы B в порядке, обратном к алфавитном - C++
Привет, форумчане! Дано задание: &gt;Даны строки A и B. Если в A есть символы из B и в B нет повторяющихся символов, то упорядочить...

Дан файл, компонентами которого являются символы. Переписать все символы в новый файл в обратном порядке. - C++
Работа с текстовыми файлами. Дан файл, компонентами которого являются символы. Переписать все символы в новый файл в обратном порядке.

Расположить в обратном порядке символы - C++
Нужно реверсировать (расположить в обратном порядке) все символы строки, расположенные до первой точки. Помогите пожалуйста!

Рекурсия. Символы строки в обратном порядке - C++
Помогите пожалуйста решить задачу: дана символьная строка. Не используя циклы, реализовать рекурсивную функцию, печатающую символы строки в...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru