Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/104: Рейтинг темы: голосов - 104, средняя оценка - 4.69
137 / 137 / 25
Регистрация: 30.09.2010
Сообщений: 333
1

Проверить, является ли введенная с клавиатуры строка двоичным числом

27.01.2011, 11:36. Показов 19558. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main() {
    setlocale(LC_ALL, "Russian");
    char s[1000];
    int a = 0;
    std::cout << "Введите число и нажмите <Enter>\n-> ";
    std::cin.getline(s, 1000);
    for(int i = 0; i < 1000; i++) {
        (s[i] == '1' && '0') || (s[i] == '1' || s[i] == '0') 
            ? a += 1 : a--;     
    }
    if(a == 1000) {
        std::cout << "Это двоичный код.";
    }
    else {
        std::cout << "Это не двоичный код.";
    }
    system("pause >> void");    
}
Выводит постоянно "Это не двоичный код.". Где я закосячил?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2011, 11:36
Ответы с готовыми решениями:

Определить, является ли введённая с клавиатуры строка двоичным числом
Задание: Напишите программу, которая определяет, является ли введённая с клавиатуры строка...

Программа, которая проверяет, является ли введенная с клавиатуры строка двоичным числом
Задание: Написать программу, которая проверяет, является ли введенная с клавиатуры строка...

Проверить, является ли введенная с клавиатуры строка шестнадцатеричным числом
Нашел на форуме код решение этой задачи, который написал человек под ником lawr #include...

Проверить, является ли введенная с клавиатуры строка целым числом
1) Напишите программу, которая проверяет, является ли введеная с клавиатуры строка с целым числом....

17
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
27.01.2011, 11:48 2
C++
1
2
(s[i] == '1' && '0') || (s[i] == '1' || s[i] == '0') 
                        ? a += 1 : a--;
это получается ты сравниваеш s[i] с единицей и нулем сразу? не лучше будет просто написать?
C++
1
s[i] == '1' || s[i] == '0'
а так же у тебя массив из 1000 символов, если строка меньше. то получается счетчик a никогда до 1к не доберется..
вроде как то так
0
137 / 137 / 25
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 11:56  [ТС] 3
а так же у тебя массив из 1000 символов, если строка меньше. то получается счетчик a никогда до 1к не доберется..
вроде как то так
Я проверял дело не в счетчике.
это получается ты сравниваеш s[i] с единицей и нулем сразу? не лучше будет просто написать?
C++
1
s[i] == '1' || s[i] == '0'
А если будет 123 или 094 в строке, то в Вашем условии выдаст "Это двоичный код."
1
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
27.01.2011, 12:07 4
Цитата Сообщение от Temirlan90 Посмотреть сообщение
А если будет 123 или 094 в строке, то в Вашем условии выдаст "Это двоичный код."
действительно, немного поспешил ..
Цитата Сообщение от Temirlan90 Посмотреть сообщение
Я проверял дело не в счетчике.
у меня если попробывать вывести а, то выводит число отличное от 1000 всегда. так что думаю дело все таки в счетчике
0
137 / 137 / 25
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 12:14  [ТС] 5
у меня если попробывать вывести а, то выводит число отличное от 1000 всегда. так что думаю дело все таки в счетчике
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main() {
    setlocale(LC_ALL, "Russian");
    char s[2];
    int a = 0;
    std::cout << "Введите число и нажмите <Enter>\n-> ";
    std::cin.getline(s, 2);
    for(int i = 0; i < 2; i++) {
        (s[i] == '1' && '0') || (s[i] == '1' || s[i] == '0') 
            ? a += 1 : a--;     
    }
    if(a == 2) {
        std::cout << "Это двоичный код.";
    }
    else {
        std::cout << "Это не двоичный код.";
    }
    system("pause >> void");    
}
вот тут поместиться 2 элемента третий на '\0' элемент и выводит тоже самое. Даже если ввожу 10, как бы проверка по первому условию.
C++
1
(s[i] == '1' && '0')
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
27.01.2011, 13:02 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
#include <iostream>
 
int main() {
        setlocale(LC_ALL, "Russian");
        const int M=1000;
        char s[M] = {'\0'};
        int a = 0;
        std::cout << "Введите число и нажмите <Enter>\n-> ";
        std::cin.getline(s, M);
        for(int i = 0; i < M; i++) {
            if(s[i] == '\0'){
                break;}
            if(!((s[i] == '1' && s[i] == '0') || (s[i] == '1' || s[i] == '0'))){
                a=0;
                break;
            }
            else{
                a=1;}
        }
        if(a){
            std::cout << "Строка двоичная" << '\n';}
        else{
            std::cout << "Строка не двоичная" << '\n';}
 
 
        //if(a == M) {
          //      std::cout << "Это двоичный код.";
        //}
        //else {
         //       std::cout << "Это не двоичный код.";
       // }
 
        //std::cout << a;
    system("pause");    
}
отредактировал, так правильнее будет .. спешу чего то)

Добавлено через 4 минуты
добавил break; иначе цикл продолжается до конца ..

Добавлено через 42 минуты
условие лучше будет записать таки вот образом.
C++
1
if(!((s[i] == '1' || s[i] == '0')))
в вашем варианте
C++
1
((s[i] == '1' && s[i] == '0') || (s[i] == '1' || s[i] == '0'))
первый элемент лишний, он никогда не будет истинной .. так как там должно совпасть оба условия для того что бы выпало true ..)
2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
27.01.2011, 13:45 7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int test_bin_number(const char * s){
    while ( *s == '0' || *s == '1' )
        ++s;
    return (int)*s;
}
 
int main(void){
    char buf[BUFSIZ];
    
    while ( printf("String: ") && scanf("%[^\n]%*c", buf) == 1 )
        printf("It is %sa binary number.\n", ( test_bin_number(buf) ) ? "NOT " : "");
    
    return 0;
}
2
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
27.01.2011, 15:16 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <algorithm>
#include <iostream>
#include <string>
 
bool IsBinaryNumber(const std::string& stringForTest) {
  return std::count(stringForTest.begin(), stringForTest.end(), '0') + 
         std::count(stringForTest.begin(), stringForTest.end(), '1') == stringForTest.length();
}
 
int main() {
  const std::string binaryNumber    = "010110001";
  const std::string notBinaryNumber = "120000101";
  
  std::cout << IsBinaryNumber(binaryNumber) << " " << IsBinaryNumber(notBinaryNumber) << std::endl;
  
  return 0;
}
Результат: http://liveworkspace.org/code/... 1d517d59e8
1
137 / 137 / 25
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 16:04  [ТС] 9
easybudda, у Вас указатель указывает на 0 и 1, и если нет других цифр то истинна?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.01.2011, 16:19 10
Temirlan90, если число - двоичное (т.е. состоит только из '0' и '1'), то последний элемент, на который указывает указатель - это '\0' (нуль-терминатор), чье числовое значение равно нулю. В противном случае указатель указывает на ненулевое значение
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.01.2011, 16:20 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    int cnt=0;
    std::for_each(str.begin(), str.end(), [&cnt](char t)
    {
        if(t == '0' || t == '1')
           ++cnt;
     });
     std::cout<<"String "<<((cnt == str.size()) ? "is" : "is not")<<" binary number\n";
     system("pause");
     return 0;
}
Или так...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    int cnt=std::count_if(str.begin(), str.end(), [](char t)
    {
        return t == '0' || t == '1';
    });
    std::cout<<"String "<<((cnt == str.size()) ? "is" : "is not")<<" binary number\n";
    system("pause");
    return 0;
}
1
137 / 137 / 25
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 16:22  [ТС] 12
Temirlan90, если число - двоичное (т.е. состоит только из '0' и '1'), то последний элемент, на который указывает указатель - это '\0' (нуль-терминатор), чье числовое значение равно нулю. В противном случае указатель указывает на ненулевое значение
Интересно=) а как тогда игнорируется остальное?? Ведь 2 это не 0 и 3 тоже и т.д
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.01.2011, 16:27 13
ForEveR, а если t - это какой-нибудь символ, который идет в таблице символов до '0'? Так что, по-моему, стоит сделать такое условие:
C++
1
if(t-'0' < 2 && t >= '0')
Добавлено через 1 минуту
Цитата Сообщение от Temirlan90 Посмотреть сообщение
Интересно=) а как тогда игнорируется остальное?? Ведь 2 это не 0 и 3 тоже и т.д
В таком случае сразу возвращается ненулевое значение.
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.01.2011, 16:27 14
Nameless One, Ну я собсна переделал) Заметил когда тестил. -1 считал за бинарный номер.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
27.01.2011, 17:03 15
Лучший ответ Сообщение было отмечено как решение

Решение

CyBOSSeR, я бы чуть попроще сделал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
bool isBinNum(const std::string & s){
    return s.find_first_not_of("01") == std::string::npos;
}
 
int main(){
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() )
        std::cout << "Is " << ( isBinNum(str) ? "" : "NOT " ) << "a binary number." << std::endl;
        
    return 0;
}

Temirlan90, указатель указывает на символ где-то в памяти. Пока этот символ есть '1' или '0' указатель перемещается вперёд на символ. Если встречается символ, отличный от '1' или '0' функция возвращает его значение. Если строка состоит только из нулей и единиц, единственный отличный от них символ - '\0' в конце строки. То есть функция вернёт или ноль (строка - двоичное число), или код первого символа в строке, отличного от нуля и единицы (строка - не двоичное число).
3
0 / 0 / 1
Регистрация: 29.03.2016
Сообщений: 12
29.03.2016, 22:42 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <string> 
using namespace std; 
int main() 
{setlocale(LC_ALL, "Russian"); 
char s[80];int n,i; 
cout<<"Введи код: "; 
cin.get(s,79); 
n=strlen(s); 
int p=0; 
for (i=0; i<n; i++) 
{ if (((s[i]=='1')||(s[i]=='0')||(s[i]==',')||(s[i]=='.'))&&(s[i]!=' ')) p=p+1;}; 
if (p==n) cout<<"Двоичный"; 
else cout<<"Не двоичный"; 
cout<<"\n"; 
return (0); }
0
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 20
01.02.2017, 18:05 17
Знаю, что уже есть решенные задачи, но разобраться не особо получается, в чем проблем-с?
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 "stdafx.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    
    bool flag = false;
    char str[20] = "";
    cout << "Введите строку:";
    cin >> str;
    for (int i = 0; str[i]; i++)
    {
        if (str[i] != '0' || str[i] != '1')
        {
            flag = true;
        }
    }
    if (flag) {
        cout << "Двоичное число";
    }
    else { cout << "Не является двоичным числом"; };
 
    system("pause");
    return 0;
}
Добавлено через 10 минут
Все, разобрался, спасибо NiRamz, вот код
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "");
    int n;
    bool flag = false;
    char str[20] = "";
    cout << "Введите строку:";
    cin >> str;
    n = strlen(str);
    for (int i = 0; i<n; i++)
    {
        if (str[i] == '\0') {
            break;
        }
        if (!((str[i] == '1' && str[i] == '0') || (str[i] == '1' || str[i] == '0')))
        {
            flag = false;
            break;
        }
        else
        {
            flag = true;
        }
    }
    if (flag) {
        cout << "Двоичное число";
    }
    else { cout << "Не является двоичным числом"; };
    cout << endl;
    system("pause");
    return 0;
}
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
01.02.2017, 18:57 18
Temirlan90, здравствуйте! Вот мой вариант решения:

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 <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string s;
    int k;
    cout << "Введите строку: " << endl;
    getline(cin, s);
    k = 0;
    for (int i = 0; s[i]; i++)
    {
        if ((s[i] == '0') || (s[i] == '1'))
            k++;
    }
    if (k == s.length())
        cout << "Это двоичное число!" << endl;
    else
        cout << "Это не двоичное число!" << endl;
    system("pause");
    return 0;
}
Можно, то же самое, через логику решить:

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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string s;
    bool p = false;
    cout << "Введите строку: " << endl;
    getline(cin, s);
    for (int i = 0; i < s.length(); i++)
    {
        if ((s[i] != '0') && (s[i] != '1'))
        {
            p = true;
            break;
        }
    }
    if (!(p))
        cout << "Это двоичное число!" << endl;
    else
        cout << "Это не двоичное число!" << endl;
    system("pause");
    return 0;
}
0
01.02.2017, 18:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2017, 18:57
Помогаю со студенческими работами здесь

Проверить, является ли введенная с клавиатуры строка целым числом
2.Написать программу, которая проверяет, является ли введенная с клавиатуры строка целым числом.

Проверить, является ли введенная с клавиатуры строка шестнадцатеричным числом
1. Написать программу, которая проверяет, является ли введенная с клавиатуры строка...

Проверить, является ли введенная с клавиатуры строка дробным отрицательным числом
Требуется написать программу, которая проверяет, является ли введенная с клавиатуры строка дробным...

Проверить, является ли введенная строка восьмеричным числом
Добрый вечер! Помогите пожалуйста. Написать программу которая проверяет является ли введенная...

Определить, является ли введенная с клавиатуры строка вещественным числом
Написать программу, которая проверяет, является ли введенная с клавиатуры строка вещественным...

программа, которая проверяет, является ли введённая с клавиатуры строка шестнадцатеричным числом
помогите, плиз, с прогой Написать программу, которая проверяет, является ли введённая с клавиатуры...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru