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

В файл пишет только первые два символа! - C++

Восстановить пароль Регистрация
 
Shkipper86
0 / 0 / 0
Регистрация: 29.08.2013
Сообщений: 30
16.10.2013, 12:42     В файл пишет только первые два символа! #1
Всем доброго времени суток. Собственно задача:Провести транс-литерацию английского текста русскими символами, т.е. заменить "А"->"A", "B"->"Б", ..., "Р"->"П". Отсутствующие символы-аналоги (Ё,Й,Ч,Ш,Щ,Ь,Ы,Ъ,Э,Я) заменить цифрами.
исходный текст считывается с файла, результат после транс-литерации записать в др. файл. Есть кое какие наработки, проблема в том что в конечный файл пишеться только первые 2 символа, и не всегда расшифровывает.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream f("input.txt");
    ofstream fl("output.txt");
    char str[256];
    char ru[]={'а','б','в','г','е','ё','ж','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ч','ш','щ','ь','ы','ъ','э','ю','я'};
    char en[]={'a','b','v','g','e','1','j','z','i','2','k','l','m','n','o','p','r','c','t','y','f','h','3','4','5','6','7','8','9','u','0'};
    int i;
    for(i=0; i<strlen(str); i++)
    {
        f>>str;
        cout<<str<<endl;
        if (str[i]==en[i])
            str[i]=ru[i];
            fl<<str[i]<<endl;
    }
cout<<"file is write in directory"<<endl;
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2013, 12:42     В файл пишет только первые два символа!
Посмотрите здесь:

Даны два слова, напечатать только те символы, которые встречаются только в одном из слов C++
Даны два файла. Переписать в третий файл только те слова, которые есть и в первом и во втором файле. C++
Известно, что среди элементов массива два и только два равны между собой. Напечатать их индексы C++
C++ Из текстового файла, состоящего из множества комплексных чисел, получить файл, который содержал бы первые два числа в каждой строке без изменения
Как сравнить первые 3 символа std::wstring строк ? :-) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
16.10.2013, 12:53     В файл пишет только первые два символа! #2
Пара наводящих на размышление вопросов:
1) чему равен strlen(srt) при в входе в цикл?
2) какова вероятность того, что str[i] будет равен en[i]?
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
16.10.2013, 12:53     В файл пишет только первые два символа! #3
не используйте strlen() в качестве ограничения цикла. Тем более, что при первой проверке str не инициализирована (содержит мусор)
calculon
 Аватар для calculon
14 / 14 / 3
Регистрация: 18.07.2012
Сообщений: 79
16.10.2013, 13:04     В файл пишет только первые два символа! #4
Как справедливо заметил, Fyret, у вас некорректно построен цикл. Да и вообще, чтобы работать с кириллицей используйте лучше wchar_t.
vozup
5 / 5 / 0
Регистрация: 25.12.2011
Сообщений: 99
16.10.2013, 13:28     В файл пишет только первые два символа! #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
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
 
 
void main()
{
    ifstream file_in("in.txt");
    ofstream file_out("out.txt");
 
    char en[] = "abcdegz";
    char ru[] = "абцдэжз";
 
    char str[256];
 
    file_in>>str;
 
    cout<<str<<endl;
 
    int i = 0;
 
    while(str[i] != '\0')
    {
        if (str[i]==en[i])
            str[i]=ru[i];
            i++;
    }
 
    file_out<<str;
 
    cout<<"file is write in directory"<<endl;
    getch();
}
Shkipper86
0 / 0 / 0
Регистрация: 29.08.2013
Сообщений: 30
16.10.2013, 13:54  [ТС]     В файл пишет только первые два символа! #6
vozup, Спасибо!!! Подогнал твой код к своему! Все работает!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2013, 14:05     В файл пишет только первые два символа!
Еще ссылки по теме:

C++ В файл выводится два объекта, а возвращается только один
Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11 C++
Известно, что среди элементов массива два и только два равны между собой. Напечатать их индексы C++

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

Или воспользуйтесь поиском по форуму:
vozup
5 / 5 / 0
Регистрация: 25.12.2011
Сообщений: 99
16.10.2013, 14:05     В файл пишет только первые два символа! #7
Пожалуйста!
Yandex
Объявления
16.10.2013, 14:05     В файл пишет только первые два символа!
Ответ Создать тему
Опции темы

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