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

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

Войти
Регистрация
Восстановить пароль
 
fktrctq0321
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 37
#1

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

10.05.2013, 00:33. Просмотров 918. Ответов 8
Метки нет (Все метки)

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

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

Дана строка-предложение. Зашифровать ее, поместив вначале все символы, расположенные на четных позициях строки... - C++
Добрый вечер! Срочно нужно решить задачку: Дана строка-предложение. Зашифровать ее, поместив вначале все символы, расположенные на четных...

Дана строка, состоящая из нескольких предложений. Найти самое короткое предложение - C++
Дана строка, состоящая из нескольких предложений. Найти самое короткое предложение.

Дана строка: предложение на русском языке. Подсчитать количество содержащихся гласных букв - C++
Пример в паскале(рабочий) program st; var S:String; i,Num:integer; begin Write('S: '); Readln(S);

Используя треугольник паскаля, зашифровать исходное предложение - C++
Задание 2: 1)Запросить у пользователя максимально возможную по условиям длинну LenMax строки. 2)Создать динамический символьный...

с клавиатуры задается предложение.зашифровать слова данного предложения - C++
Задание: с клавиатуры задается предложение.зашифровать слова данного предложения по принципу "сдвиг-2 символа":a-c,b-d,c-e и т.д. Я не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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 заполнить предварительно строку нулями. Иначе можете выйти за пределы при выводе на экран.
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 заполнить предварительно строку нулями. Иначе можете выйти за пределы при выводе на экран.
Спасибо, надеюсь, не допущу подобных ошибок в будущем
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2013, 18:07
Привет! Вот еще темы с ответами:

Дана строка. Подсчитать сколько раз первая строка входит во вторую - C++
Дана строка. Подсчитать сколько раз первая строка входит во вторую. Например: вводим &quot;при&quot; (строка должна вводиться с клавиатуры, как на...

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

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

Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н - C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.05.2013, 18:07
Ответ Создать тему
Опции темы

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