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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.82
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 11:36     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом. #1
Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом.
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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
209 / 209 / 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
 Аватар для 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
209 / 209 / 16
Регистрация: 26.12.2010
Сообщений: 691
27.01.2011, 12:07     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом. #4
Цитата Сообщение от Temirlan90 Посмотреть сообщение
А если будет 123 или 094 в строке, то в Вашем условии выдаст "Это двоичный код."
действительно, немного поспешил ..
Цитата Сообщение от Temirlan90 Посмотреть сообщение
Я проверял дело не в счетчике.
у меня если попробывать вывести а, то выводит число отличное от 1000 всегда. так что думаю дело все таки в счетчике
Temirlan90
 Аватар для 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
209 / 209 / 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
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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++
 Аватар для CyBOSSeR
2294 / 1664 / 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
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 16:04  [ТС]     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом. #9
easybudda, у Вас указатель указывает на 0 и 1, и если нет других цифр то истинна?
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
27.01.2011, 16:19     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом. #10
Temirlan90, если число - двоичное (т.е. состоит только из '0' и '1'), то последний элемент, на который указывает указатель - это '\0' (нуль-терминатор), чье числовое значение равно нулю. В противном случае указатель указывает на ненулевое значение
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
27.01.2011, 16:22  [ТС]     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом. #12
Temirlan90, если число - двоичное (т.е. состоит только из '0' и '1'), то последний элемент, на который указывает указатель - это '\0' (нуль-терминатор), чье числовое значение равно нулю. В противном случае указатель указывает на ненулевое значение
Интересно=) а как тогда игнорируется остальное?? Ведь 2 это не 0 и 3 тоже и т.д
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
27.01.2011, 16:27     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом. #13
ForEveR, а если t - это какой-нибудь символ, который идет в таблице символов до '0'? Так что, по-моему, стоит сделать такое условие:
C++
1
if(t-'0' < 2 && t >= '0')
Добавлено через 1 минуту
Цитата Сообщение от Temirlan90 Посмотреть сообщение
Интересно=) а как тогда игнорируется остальное?? Ведь 2 это не 0 и 3 тоже и т.д
В таком случае сразу возвращается ненулевое значение.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.01.2011, 16:27     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом. #14
Nameless One, Ну я собсна переделал) Заметил когда тестил. -1 считал за бинарный номер.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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' в конце строки. То есть функция вернёт или ноль (строка - двоичное число), или код первого символа в строке, отличного от нуля и единицы (строка - не двоичное число).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2016, 22:42     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
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); }
Yandex
Объявления
29.03.2016, 22:42     Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом.
Ответ Создать тему
Опции темы

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