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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,279
Завершенные тесты: 1
#1

переобразовать текст в 0 и 1 - C++

27.09.2009, 10:38. Просмотров 1615. Ответов 32
Метки нет (Все метки)

прошу прощение если повторяю тему,просто не знаю как правильно вопрос для поиска задать,решил тему откррыть,как мне написать прогу того,чтобы вводимый текст был записан 0ами и 1ами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2009, 10:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос переобразовать текст в 0 и 1 (C++):

Исправить ошибку! Невозможно переобразовать - C++
Подскажите как исправить ошибку! #include "stdafx.h" #include <iostream> #include <stdio.h> #include <string.h> using...

С++ Дан текст, составленный из строчных букв. Напечатать текст заглавными буквами - C++
C++ Дан текст, составленный из строчных букв. Напечатать текст заглавными буквами. Подскажите, пожалуйста, как это нужно сделать?

Неправильно отображается текст (лишний текст при вводе точки) - C++
Привет всем, нид хел по коду С++. Все работает, но не правильно отображает текст ( лишний текст при вводе символа (точки) '.'...

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

Дописать в конец a.jpeg некий секретный текст. Вывести этот текст на экран - C++
Как мне стало известно все .jpeg оканчиваются на маркер FFD9. Его мы и будем искать при выводе результата. Сначала откроем файл на...

Как правильно считать текст из файла? Весь текст, со всеми знаками, пробелами - C++
подскажите, чет затупил как правильно считать текст из файла(весь текст со всеми знаками пробелами и т.д.), чтобы поработать с этим текстом...

32
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
27.09.2009, 10:40 #2
в смысле брал последовательно код каждого символа из строки и переводил его в двоичную СС?
0
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,279
Завершенные тесты: 1
27.09.2009, 11:12  [ТС] #3
M128K145, ну да....
то есть слово HELLO не будет отличать от H E L L O ?

Добавлено через 24 минуты
ну что нету способов никаких?
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
27.09.2009, 11:21 #4
МедведЪ, по-моему,ты не понимаешь,что хочешь. HELLO и H E L L O будут отличаться,это разные строки - как бы ты их не записывал.
1
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,470
27.09.2009, 11:23 #5
Так ты возьми да напиши сам. Берём какой-нибудь символ. Например 'Z'

1) Смотришь, каким числом он представлен в памяти. Таблицу кодировки найди. Это число будет 90

2) Представляешь число Z в шестнадцатиричном формате. Как думай сам. Это будет 5A

3) Потом представляешь это число в двоичном формате. Тут просто. Каким бы длинным ни было шестнадцатиричное число, просто разбивай его на цифры и вместо каждой цифры пиши соответвующую последовательность нолей и единиц

Так, вместо 5 пиши 101, вместо A 1010. Получается 1011010. Вот и всё.
Цифр в шестнадцатиричном числе всего 16, какая последовательность нолей и единиц какой цифре соответствует, сообрази сам.
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
27.09.2009, 11:36 #6
МедведЪ, вот
дубовый вариант
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
#include <iostream>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char *text = "text";
    size_t n = strlen(text);
    int *mas = new int[n];
    int buf;
    for(size_t i = 0; i < n; ++i)
    {
        mas[i] = 0;
        buf = (int)text[i];
        std::cout<<buf<<'\t';
        if(buf >= 128)
        {
            mas[i] = 1;
            buf -= 128;
        }
        if(buf >= 64)
        {
            mas[i] *= 10;
            ++mas[i];
            buf -= 64;
        }
        else
            mas[i] *= 10;
        if(buf >= 32)
        {
            mas[i] *= 10;
            ++mas[i];
            buf -= 32;
        }
        else
            mas[i] *= 10;
        if(buf >= 16)
        {
            mas[i] *= 10;
            ++mas[i];
            buf -= 16;
        }
        else
            mas[i] *= 10;
        if(buf >= 8)
        {
            mas[i] *= 10;
            ++mas[i];
            buf -= 8;
        }
        else
            mas[i] *= 10;
        if(buf >= 4)
        {
            mas[i] *= 10;
            ++mas[i];
            buf -= 4;
        }
        else
            mas[i] *= 10;
        if(buf >= 2)
        {
            mas[i] *= 10;
            ++mas[i];
            buf -= 2;
        }
        else
            mas[i] *= 10;
        if(buf > 0)
        {
            mas[i] *= 10;
            ++mas[i];
        }
        else
            mas[i] *= 10;
        std::cout<<mas[i]<<'\n';
    }
 
    system("pause");
    return 0;
}
, но работает примерно правильно
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
27.09.2009, 12:15 #7
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
#include <stdio.h>
#include <locale.h>
#include <string.h>
    
void binPrn(int c){
    if ( c / 2 )
        binPrn(c / 2);
    putchar(c % 2 + '0');
}
 
int main(){
    char buf[BUFSIZ];
    int i, len;
    
    setlocale(LC_ALL, ".1251");
    while ( fgets(buf, BUFSIZ, stdin) ){
        len = strlen(buf);
        buf[--len] = 0;
        for ( i = 0; i < len; i++ )
            binPrn((unsigned char)buf[i]);
        putchar('\n');
    }
    return 0;
}
1
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,279
Завершенные тесты: 1
27.09.2009, 12:36  [ТС] #8
easybudda, прокомментируй тут

Добавлено через 9 минут
например что тут функция похожаяя на getchar?
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
27.09.2009, 12:53 #9
МедведЪ, А с какого места не понятно? Функция binPrn печатает свой аргумент в двоичном виде (обсуждалось не так давно тут на форуме). buf - строка, прочитанная из консоли. Вместо
C
1
2
len = strlen(buf);
buf[--len] = 0;
можно просто
C
1
len = strlen(buf) - 1;
написать (fgets символ \n в конце строки оставляет). Можно было бы и так
C
1
for ( i = 0; i < strlen(buf) - 1; i++ ){
написать, но это как-раз дурной стиль - strlen при каждом проходе считалась бы. А дальше - каждый символ передаётся binPrn, как unsigned char. Если преобразования не делать, будут неправильно символы с кодами 128+ обрабатываться. Да и всё, собственно...
0
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,279
Завершенные тесты: 1
27.09.2009, 13:05  [ТС] #10
easybudda, а как делать что бы с файла читало??...я просто не понимаю что надо gect(f) поставить....поставил вместо unsigned char,ошибка...я просто не могу понять где что и как
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
27.09.2009, 13:27 #11
Цитата Сообщение от МедведЪ Посмотреть сообщение
а как делать что бы с файла читало?
а вот так!
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
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
    
void binPrn(int c){
    if ( c / 2 )
        binPrn(c / 2);
    putchar(c % 2 + '0');
}
 
int main( int argc, char **argv ){
    FILE *inp;
    char buf[BUFSIZ];
    int i, len;
    
    if ( argc < 2 ){
        setlocale(LC_ALL, ".1251");
        inp = stdin;
    }
    else{
        if ( (inp = fopen(argv[1], "r") ) == NULL ){
            fprintf(stderr, "%s: Can't open file %s\n", argv[0], argv[1]);
            exit(1);
        }
    }
    
    while ( fgets(buf, BUFSIZ, inp) ){
        len = strlen(buf) - 1;
        for ( i = 0; i < len; i++ )
            binPrn((unsigned char)buf[i]);
        putchar('\n');
    }
    return 0;
}
запустишь без параметров - будет из консоли читать, запустишь так
Код
prog.exe file.txt
будет из файла читать... Опять же, можно и первую програмку вот так
Код
prog.exe < file.txt
запустить...
...
Засомневался по поводу пересчёта strlen(buf) при каждом проходе в цикле
C
1
for ( i = 0; i < strlen(buf) - 1; i++ ){
ну в любом случае - с переменной и нагляднее, и точно ничего пересчитываться каждый раз не будет...
1
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,279
Завершенные тесты: 1
27.09.2009, 14:34  [ТС] #12
мда...придется хорошоенько и много читать этот код чтобы понять этот код...
но спасибо все равно
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
27.09.2009, 14:35 #13
Цитата Сообщение от easybudda Посмотреть сообщение
Засомневался по поводу пересчёта strlen(buf) при каждом проходе в цикле
зря сомневался
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
#include <stdio.h>
#include <string.h>
    
/* попытка понять, как считается условие в операторе for
    для пробы устроим цикл, в котором длинна строки будет уменьшаться
*/
 
int main(void){
    char buf[] = "ABCDEF";
    int i, l;
    
 
    l = strlen(buf);
/* Если strlen считается только один раз, строка должна обнулиться до А,
    в противном случае останутся символы ABC
*/
    for ( i = 0; i < strlen(buf); i++ )
        buf[l - i] = 0;
    if ( buf[1] == 0 )
        printf("strlen считается один раз\n");
    else if ( buf[1] == 'B' )
        printf("strlen считается КАЖДЫЙ раз в начале цикла\n");
    else 
        printf("хз чё тут тварится!\n");
        
    return 0;
}
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
27.09.2009, 17:25 #14
Есть почти стандартная функция itoa() которая умеет переводить число в любую заданную систему счисления. Например в двоичную
1
AnonymC
1162 / 444 / 23
Регистрация: 23.06.2009
Сообщений: 6,279
Завершенные тесты: 1
27.09.2009, 18:53  [ТС] #15
odip, а как использовать?
напр
C++
1
itoa(10);
хотя тут я не указал в какую сис-му переводить
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2009, 18:53
Привет! Вот еще темы с ответами:

Считайте текст и выведите на экран исходный текст, а затем только каждое третье предложение - C++
Помогите, пожалуйста!! очень нужно!! Считайте текст и выведите на экран исходный текст, а затем только каждое третье предложение.

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

Дан текст и некоторые два слова. Определить, сколько раз они входят в текст и... - C++
Дан текст и некоторые два слова. Определить, сколько раз они входят в текст и сколько раз они располагаются непосредственно друг за другом.

Написать программу, которая считывает текст из файла и выводит на экран количество гласных букв в строке текст - C++
Написать программу, которая считывает текст из файла и выводит на экран количество гласных букв в строке текста


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

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

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