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

дана строка-предложение. зашифровать ее - C++

Восстановить пароль Регистрация
 
fktrctq0321
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 37
10.05.2013, 00:33     дана строка-предложение. зашифровать ее #1
Доброго времени суток! Помогите, пожалуйста.
Дана строка-предложение. зашифровать ее, поместив вначале все символы, расположенные на четных местах, а затем, в обратном порядке, все символы, расположенные на нечетных местах. (например, строка "Программа" превратится в "ргамамроП")
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 00:33     дана строка-предложение. зашифровать ее
Посмотрите здесь:

C++ с клавиатуры задается предложение.зашифровать слова данного предложения
Дана строка-предложение. Зашифровать ее, поместив вначале все символы, расположенные на четных позициях строки... C++
дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры. C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н C++
C++ Используя треугольник паскаля, зашифровать исходное предложение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.05.2013, 19:47     дана строка-предложение. зашифровать ее #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <clocale>
 
int main()
{
    std::setlocale( LC_ALL, "Rus" );
    std::string s = "Программа";
    const int len = s.length();
    for( int i=1; i<len; i+=2 )
    {
        std::cout << s[i];
    }
    for( int i=len%2?len-1:len-2; i>=0; i-=2 )
    {
        std::cout << s[i];
    }
 
    std::system( "pause" );
    return 0;
}
fktrctq0321
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 37
14.05.2013, 10:54  [ТС]     дана строка-предложение. зашифровать ее #3
Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <clocale>
 
int main()
{
    std::setlocale( LC_ALL, "Rus" );
    std::string s = "Программа";
    const int len = s.length();
    for( int i=1; i<len; i+=2 )
    {
        std::cout << s[i];
    }
    for( int i=len%2?len-1:len-2; i>=0; i-=2 )
    {
        std::cout << s[i];
    }
 
    std::system( "pause" );
    return 0;
}
а как можно, исходя из данного кода, записать результат в строку, чтобы потом записать её в файл?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
14.05.2013, 10:58     дана строка-предложение. зашифровать ее #4
Цитата Сообщение от fktrctq0321 Посмотреть сообщение
а как можно, исходя из данного кода, записать результат в строку, чтобы потом записать её в файл?
Если в виде строки не нужно иметь экземпляр, а просто записать в файл, то в 12 и 16 строках вместо std::cout использовать открытый на запись поток (std::ofstream). Если нужно записать в строку, то в этих же строках следует использовать std::stringstream, ну а потом опять в std::ofstream выдать. Если не ясно, могу дать пример.
fktrctq0321
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 37
14.05.2013, 17:36  [ТС]     дана строка-предложение. зашифровать ее #5
Цитата Сообщение от Tulosba Посмотреть сообщение
Если в виде строки не нужно иметь экземпляр, а просто записать в файл, то в 12 и 16 строках вместо std::cout использовать открытый на запись поток (std::ofstream). Если нужно записать в строку, то в этих же строках следует использовать std::stringstream, ну а потом опять в std::ofstream выдать. Если не ясно, могу дать пример.
Будьте добры пример на запись в строку (именно запись результата в строку). Причём, как это можно сделать, когда используется, по сути, не строка, а массив символов (char)?
Чтобы было понятно, что имею в виду, вот фрагмент кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
using namespace std;
...
char *str = new char();
...
const int l = strlen(str);
...
cout << "\nРезультат зашифровщика:"<< endl;
for( int i=1;i<l; i+=2 )
{
    cout << str[i];
}
for( int i=l%2?l-1:l-2; i>=0; i-=2 )
{
    cout << str[i];
}
Записать в файл я смогу сам
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
14.05.2013, 17:44     дана строка-предложение. зашифровать ее #6
Цитата Сообщение от fktrctq0321 Посмотреть сообщение
когда используется, по сути, не строка, а массив символов (char)
Всё просто.
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main() {
 
    char str[] = "MagicString";
    char result[sizeof(str)] = {0};
    
    const int l = strlen(str);
    cout << "\nРезультат зашифровщика:"<< endl;
    
    int j = 0;
    
    for( int i=1;i<l; i+=2 )
    {
        result[j++] = str[i];
    }
    for( int i=l%2?l-1:l-2; i>=0; i-=2 )
    {
        result[j++] = str[i];
    }    
    
    cout << result << endl;
 
    return 0;
}
fktrctq0321
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 37
14.05.2013, 17:57  [ТС]     дана строка-предложение. зашифровать ее #7
Цитата Сообщение от Tulosba Посмотреть сообщение
Всё просто.
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main() {
 
    char str[] = "MagicString";
    char result[sizeof(str)] = {0};
    
    const int l = strlen(str);
    cout << "\nРезультат зашифровщика:"<< endl;
    
    int j = 0;
    
    for( int i=1;i<l; i+=2 )
    {
        result[j++] = str[i];
    }
    for( int i=l%2?l-1:l-2; i>=0; i-=2 )
    {
        result[j++] = str[i];
    }    
    
    cout << result << endl;
 
    return 0;
}
Большое спасибо!

Добавлено через 8 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
Если в виде строки не нужно иметь экземпляр, а просто записать в файл, то в 12 и 16 строках вместо std::cout использовать открытый на запись поток (std::ofstream). Если нужно записать в строку, то в этих же строках следует использовать std::stringstream, ну а потом опять в std::ofstream выдать. Если не ясно, могу дать пример.
И всё же не работает
Попросту вылетает программа. В чём ошибка?
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <conio.h>
#include <locale.h>
#include <string>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251); 
    setlocale(LC_ALL, "Rus");
    char *str = new char();
    char *res = new char();
    FILE *f_in, *f_out;
    char *name1="адрес файла";
    if ((f_in=fopen(name1, "r"))==NULL)
    {
        perror ("Ошибка в чтении файла");
        cout << '\n';
    }
    else  
    {
        while (!feof(f_in))
        {
            fgets(str,300,f_in); 
        }
        fclose(f_in);
    }
    cout << endl;
    cout << "Исходные данные: \n";
    cout << str;
    cout << endl;
    const int l = strlen(str);
    int j=0;
    cout << "\nРезультат зашифровщика:"<< endl;
    for( int i=1;i<l; i+=2 )
    {
        res[j++] = str[i];
    }
    for( int i=l%2?l-1:l-2; i>=0; i-=2 )
    {
        res[j++] = str[i];
    }
 
    printf("%c",res);
    
        //последует запись в файл
 
    cout << "\n\n\n\n\n";
}
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
14.05.2013, 18:06     дана строка-предложение. зашифровать ее #8
Вы память не выделили под строку:
Цитата Сообщение от fktrctq0321 Посмотреть сообщение
char *str = new char();
Так же и для res.

Цитата Сообщение от fktrctq0321 Посмотреть сообщение
fgets(str,300,f_in);
Второй параметр как раз максимальная длина строки. Откуда 300? Должно быть столько же, сколько выделили для str.

Заводим константу и опираемся на нее:
C++
1
2
3
4
const int maxlen = 300;
char *str = new char[maxlen];
//...
fgets(str,maxlen,f_in);
И не забудьте для res заполнить предварительно строку нулями. Иначе можете выйти за пределы при выводе на экран.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2013, 18:07     дана строка-предложение. зашифровать ее
Еще ссылки по теме:

Дана строка символов. Проверьте,является ли данная строка палиндромом C++
C++ Дана строка, состоящая из нескольких предложений. Найти самое короткое предложение
Дана строка-предложение на русском языке. Зашифровать её C++

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

Или воспользуйтесь поиском по форуму:
fktrctq0321
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 37
14.05.2013, 18:07  [ТС]     дана строка-предложение. зашифровать ее #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Вы память не выделили под строку:

Так же и для res.


Второй параметр как раз максимальная длина строки. Откуда 300? Должно быть столько же, сколько выделили для str.

Заводим константу и опираемся на нее:
C++
1
2
3
4
const int maxlen = 300;
char *str = new char[maxlen];
//...
fgets(str,maxlen,f_in);
И не забудьте для res заполнить предварительно строку нулями. Иначе можете выйти за пределы при выводе на экран.
Спасибо, надеюсь, не допущу подобных ошибок в будущем
Yandex
Объявления
14.05.2013, 18:07     дана строка-предложение. зашифровать ее
Ответ Создать тему
Опции темы

Текущее время: 02:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru