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

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

Войти
Регистрация
Восстановить пароль
 
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 418
Записей в блоге: 2
Завершенные тесты: 1
#1

буква "я" - C++

23.02.2011, 22:25. Просмотров 553. Ответов 5
Метки нет (Все метки)

Когда расшифровываю файл(Конечно же после его шифрования) все буквы "я"-маленькаие оказываются в конце файла, а из центра все изчезают! Что не так?
Мой код на си
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <process.h>
 
void pack(char* namefile){
    printf("Packing ...");
    _spawnl(_P_WAIT,"E:\\Program Files\\7-Zip\\7z.exe","7z.exe", "a", "C:\\test.7z" , namefile, NULL);
}
 
void repack(char * namefile){
    printf("RePacing ...");
    char *s = "-o";
//  strcat(s,namefile);
    _spawnl(_P_WAIT,"E:\\Program Files\\7-Zip\\7z.exe","7z.exe", "e","C:\\test.7z", "-oC:\\", NULL);
}
 
void shifr(char * filename){
    FILE *stream;
    char *ch = {'\0'};
    char qw[1000] = {'\0'};
    char qe[2] = " ";
    int i=0;
    if( (stream  = fopen( filename, "r" )) != NULL )    {
        printf("Shifr ...\n");
        char c;
        int num = fread(&c, sizeof( char ),1, stream);
        while(num!=0){
            if(c == 255)
            {
                c = 0;
                qe[0] = c;
                strcat(qw,qe);  
            }
            else
            {
                qe[0] = c+1;
                //ch[0] = qw[0];
                if(strlen(qw)==0)
                    strcpy(qw,qe);
                else
                    strcat(qw,qe);  
            }
            num = fread(&c, sizeof( char ), 1, stream);
            i++;
        }
        fclose (stream );
        if( (stream  = fopen( filename, "w" )) != NULL )    
            num = fwrite( qw, sizeof( char ), i, stream );
        fclose( stream );
    }
    else        return;
}
 
 
void reshifr(char * filename){
    FILE *stream;
    char *ch = {'\0'};
    char qw[1000] = {'\0'};
    char qe[2] = " ";
    int i=0;
    if( (stream  = fopen( filename, "r" )) != NULL )    {
        printf("ReShifr ...\n");
        char c;
        int num = fread(&c, sizeof( char ),1, stream);
        while(num!=0){
            if(c == 0)
            {
                c = 255;
                qe[0] = c;
                strcat(qw,qe);  
            }
            else
            {
                qe[0] = c-1;
                //ch[0] = qw[0];
                if(strlen(qw)==0)
                    strcpy(qw,qe);
                else
                    strcat(qw,qe);  
            }
            num = fread(&c, sizeof( char ), 1, stream);
            i++;
        }
        fclose (stream );
        if( (stream  = fopen( filename, "w" )) != NULL )    
            num = fwrite( qw, sizeof( char ), i, stream );
        fclose( stream );
    }
    else        return;
}
int main (int N, char ** str){
    if(N!=3)
    {
        printf("No filename ..!");
        //scanf("");
    }
    if(!strcmp(str[1],"pack"))
        pack(str[2]);
 
    if(!strcmp(str[1],"repack"))
        repack(str[2]);
 
    if(!strcmp(str[1],"shifr"))
        shifr(str[2]);
 
    if(!strcmp(str[1],"reshifr"))
        reshifr(str[2]);
 
    return 0;
}


Добавлено через 31 минуту
для работы программы
из командной стрроки вводится три параметра

<Имя проектного exe файла >
<ключевое слово(shifr, reshifr ...)>
<имя файла с кот. нужно произвести нужную операцию>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 22:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос буква "я" (C++):

Проверить, встрачается ли в заданном тексте буква "а" чаще, чем буква "b" - C++
задача: Напечатать true, если в заданном тексте буква &quot;а&quot; встречается чаще чем буква &quot;b&quot;, и напечатать false в противном случае. Помогите...

Ввести с клавиатуры строку, заменить в ней все буква "а" на букву "b" - C++
Здравствуйте) Вот возникла такая проблема.... не умею работать с указателями еще(( Помогите написать задачку: &quot;используя указатели,...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Записать из строки все буква "А" "а" в файл - C++
Записать из заданной строки все буквы А а в файл. Плз если можно срочно)) Буду очень благодарен)) Желательно на языке для новичков

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал - C++
Составить программу, которая при вводе символа с клавиатуры выво-дит &quot;латинская буква&quot; при вводе латинской буквы и &quot;не латинская бук-ва&quot;...

5
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.02.2011, 07:34 #2
C
1
2
3
4
5
            if (c == 255) {
                c = 0;
                qe[0] = c;
                strcat(qw, qe);  
            }
что за логика ?

нельзя применять fread() к текстовому файлу, так как она может прочитать не то, что там есть

C
1
2
    char c;
    int num = fread(&c, sizeof( char ),1, stream);
вместо этого попробуй это
C
1
2
3
    int c;
 
    c = getc(stream);
1
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 418
Записей в блоге: 2
Завершенные тесты: 1
24.02.2011, 11:16  [ТС] #3
Цитата Сообщение от accept Посмотреть сообщение
что за логика ?
Шифрация текста у меня такая что каждый символ заменяется на следующий в таблице символов!
C++
1
qe[0] = c+1;
И если символ какой либо окажется 255 -ым то я его попросту заменяю на самый первый т. е.
C++
1
с = 0;
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.02.2011, 11:20 #4
C
1
strcat(qw, qe);
функция ничего не делает, когда там два нуль-символа в qe
1
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 418
Записей в блоге: 2
Завершенные тесты: 1
24.02.2011, 11:42  [ТС] #5
Ну и что ты предлагаешь? еще одно условие поставить для нуль- символа?
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.02.2011, 05:19 #6
для начала упростить код, много лишнего
главное - многоэтажные if'ы, что делает программу монолитной (непригодной к изменениям)
опиши словами

например, зачем вставлять return в else, если можно поставить ; ?

C
1
char *ch = {'\0'};
это ошибка, можно было бы сделать char *ch = NULL;, если бы эта штука вообще нужна была

Добавлено через 17 часов 30 минут
не, даже не так, зачем вставлять return в else, если этот else можно вообще удалить и получится то же самое ?
1
25.02.2011, 05:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2011, 05:19
Привет! Вот еще темы с ответами:

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

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...


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

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

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