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

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

Войти
Регистрация
Восстановить пароль
 
Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
#1

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

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

Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом.
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");    
}
Выводит постоянно "Это не двоичный код.". Где я закосячил?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2011, 11:36     Проверить, является ли введенная с клавиатуры строка двоичным числом
Посмотрите здесь:

Проверить, является ли введенная с клавиатуры строка целым числом C++
C++ Проверить, является ли введенная строка восьмеричным числом
C++ Определить, является ли введенная с клавиатуры строка вещественным числом
C++ Программа, которая проверяет, является ли введенная с клавиатуры строка двоичным числом
Определить, является ли введённая с клавиатуры строка двоичным числом C++
C++ Проверить, является ли введенная строка палиндромом
Написать программу, которая проверяет, является ли введенная с клавиатуры строка дробным отрицательным числом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 16
Регистрация: 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к не доберется..
вроде как то так
Temirlan90
131 / 131 / 8
Регистрация: 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 в строке, то в Вашем условии выдаст "Это двоичный код."
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
27.01.2011, 12:07     Проверить, является ли введенная с клавиатуры строка двоичным числом #4
Цитата Сообщение от Temirlan90 Посмотреть сообщение
А если будет 123 или 094 в строке, то в Вашем условии выдаст "Это двоичный код."
действительно, немного поспешил ..
Цитата Сообщение от Temirlan90 Посмотреть сообщение
Я проверял дело не в счетчике.
у меня если попробывать вывести а, то выводит число отличное от 1000 всегда. так что думаю дело все таки в счетчике
Temirlan90
131 / 131 / 8
Регистрация: 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')
NiRamz
211 / 211 / 16
Регистрация: 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 ..)
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
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;
}
CyBOSSeR
Эксперт C++
2298 / 1668 / 86
Регистрация: 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/925a7e...d7281d517d59e8
Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 16:04  [ТС]     Проверить, является ли введенная с клавиатуры строка двоичным числом #9
easybudda, у Вас указатель указывает на 0 и 1, и если нет других цифр то истинна?
Nameless One
Эксперт С++
5764 / 3413 / 255
Регистрация: 08.02.2010
Сообщений: 7,429
27.01.2011, 16:19     Проверить, является ли введенная с клавиатуры строка двоичным числом #10
Temirlan90, если число - двоичное (т.е. состоит только из '0' и '1'), то последний элемент, на который указывает указатель - это '\0' (нуль-терминатор), чье числовое значение равно нулю. В противном случае указатель указывает на ненулевое значение
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
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;
}
Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 16:22  [ТС]     Проверить, является ли введенная с клавиатуры строка двоичным числом #12
Temirlan90, если число - двоичное (т.е. состоит только из '0' и '1'), то последний элемент, на который указывает указатель - это '\0' (нуль-терминатор), чье числовое значение равно нулю. В противном случае указатель указывает на ненулевое значение
Интересно=) а как тогда игнорируется остальное?? Ведь 2 это не 0 и 3 тоже и т.д
Nameless One
Эксперт С++
5764 / 3413 / 255
Регистрация: 08.02.2010
Сообщений: 7,429
27.01.2011, 16:27     Проверить, является ли введенная с клавиатуры строка двоичным числом #13
ForEveR, а если t - это какой-нибудь символ, который идет в таблице символов до '0'? Так что, по-моему, стоит сделать такое условие:
C++
1
if(t-'0' < 2 && t >= '0')
Добавлено через 1 минуту
Цитата Сообщение от Temirlan90 Посмотреть сообщение
Интересно=) а как тогда игнорируется остальное?? Ведь 2 это не 0 и 3 тоже и т.д
В таком случае сразу возвращается ненулевое значение.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.01.2011, 16:27     Проверить, является ли введенная с клавиатуры строка двоичным числом #14
Nameless One, Ну я собсна переделал) Заметил когда тестил. -1 считал за бинарный номер.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
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' в конце строки. То есть функция вернёт или ноль (строка - двоичное число), или код первого символа в строке, отличного от нуля и единицы (строка - не двоичное число).
polin0m
0 / 0 / 0
Регистрация: 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); }
safon64r
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 17
Завершенные тесты: 1
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2017, 18:57     Проверить, является ли введенная с клавиатуры строка двоичным числом
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Fixer_84
482 / 329 / 156
Регистрация: 30.04.2016
Сообщений: 733
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;
}
Yandex
Объявления
01.02.2017, 18:57     Проверить, является ли введенная с клавиатуры строка двоичным числом
Ответ Создать тему
Опции темы

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