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

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

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

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

23.02.2011, 22:25. Просмотров 527. Ответов 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 ...)>
<имя файла с кот. нужно произвести нужную операцию>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2011, 22:25     буква "я"
Посмотрите здесь:

Найти все и вывести все слова в которых есть буква "к" C++
C++ Дан текстовый файл F. найти самое долгое слово, вторая буква которых "о". если слов с одинаковой длинной несколько, то сообщить об этом
C++ Вывести все слова, в которых есть буква "a"
Игра "Последняя буква" C++
C++ Можно ли получить адрес памяти где хранится буква "a"
C++ Проверить, встрачается ли в заданном тексте буква "а" чаще, чем буква "b"
C++ Найти сколько раз буква "a" встречается в заданном слове
C++ Заменить "fopen" в c++ на "TOpenDialog" в Builder6
Посчитать сколько раз встречается латинская буква "а" в первом и последнем столбце массива C++
Задать строку и посчитать, сколько раз в нее входит буква "а" C++
Определить, есть ли в тексте буква "а" (и найти ее порядковый номер) C++
C++ Зачем нужны "set" и "get" в классах

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4819 / 3239 / 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);
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 414
Записей в блоге: 2
Завершенные тесты: 1
24.02.2011, 11:16  [ТС]     буква "я" #3
Цитата Сообщение от accept Посмотреть сообщение
что за логика ?
Шифрация текста у меня такая что каждый символ заменяется на следующий в таблице символов!
C++
1
qe[0] = c+1;
И если символ какой либо окажется 255 -ым то я его попросту заменяю на самый первый т. е.
C++
1
с = 0;
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.02.2011, 11:20     буква "я" #4
C
1
strcat(qw, qe);
функция ничего не делает, когда там два нуль-символа в qe
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 414
Записей в блоге: 2
Завершенные тесты: 1
24.02.2011, 11:42  [ТС]     буква "я" #5
Ну и что ты предлагаешь? еще одно условие поставить для нуль- символа?
accept
4819 / 3239 / 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 можно вообще удалить и получится то же самое ?
Yandex
Объявления
25.02.2011, 05:19     буква "я"
Ответ Создать тему
Опции темы

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