Создание собственных типов данных с последовательностями 1 и 0

Привет, я пытаюсь создать тип данных, который я могу использовать, состоящий только из двух символов (0,1). Я делаю это, чтобы ограничить алфавит в моем алгоритме строк конечных автоматов. Я программирую на C, поэтому мне было интересно, как я могу это сделать, потому что тип данных символов 256, следовательно, слишком велик.

РЕДАКТИРОВАТЬ:: http://www.sanfoundry.com/java-program-perform-finite-state-automaton-based-search/

Я нашел другую реализацию своего кода по ссылке выше. Я пытаюсь изменить переменную NO_OF_CHARS на 2, чтобы можно было использовать только два разных символа.

Ниже приведен код для моего основного, если это поможет.

int main()
{
     char a[]="101111";
     char b[]="10";
     int m=strlen(a);
     int n=strlen(b);
     SearchString(a,b,n,m);
     return 0;
}

Спасибо


person jonn    schedule 17.03.2015    source источник
comment
Я не думаю, что кто-то может понять, что вы пытаетесь спросить.   -  person Iharob Al Asimi    schedule 17.03.2015
comment
Используйте bool из stdbool.h. Или определите enum только с двумя значениями.   -  person Eugene Sh.    schedule 17.03.2015
comment
@iharob: Ему нужен тип данных, единственными допустимыми значениями которого являются 0 и 1. Наименьший известный ему тип — это char, который позволяет вам поместить 0..255, поэтому он слишком разрешителен.   -  person Joey Adams    schedule 17.03.2015
comment
@jonn Вы пытаетесь сэкономить память или просто применяете правила, согласно которым значение может быть только 0 или 1?   -  person user3386109    schedule 17.03.2015
comment
Просто примените правило, что это может быть 0 или 1; В настоящее время у меня есть char a[]=101111; символ б[]=10; как мой текст и шаблон. Я хочу объявить функцию void createTransitionFunction(int TF[][2],char *b,int m) для алгоритма сопоставления строк конечных автоматов, который в настоящее время не работает, потому что 2 должно быть 256 для char, чтобы он работал.   -  person jonn    schedule 17.03.2015
comment
В стандартном C нет типов меньше char; конечно, вы можете использовать bool или enum, но это просто проверки во время компиляции, которые несколько ограничивают то, что вы можете поместить в свои переменные. Вы всегда можете получить тот же эффект, используя символы и сохраняя в них только 1 или 0.   -  person Matteo Italia    schedule 17.03.2015
comment
@jonn Я не совсем понял, почему 2 должно быть 256 для char. Я думаю, что это ключ к тому, что вы пытаетесь сделать, но я не знаю точно, что вы имеете в виду. Можете ли вы уточнить или привести пример?   -  person user3386109    schedule 17.03.2015
comment
Потому что я использую только символы 0 и 1. Я не хочу использовать другие, потому что это увеличивает сложность алгоритма.   -  person jonn    schedule 17.03.2015
comment
Если я правильно понимаю, то вы хотите объявить массив типа int TF["111"]["10"] для обозначения массива 7x2, это правильно?   -  person user3386109    schedule 17.03.2015
comment
да, я хочу, чтобы он перебирал только 0 и 1. Не все 256 символов   -  person jonn    schedule 17.03.2015
comment
Почему вы чувствуете необходимость перебрать все 256 символов, а не только '0'..'1'? Ваш код не проливает света на то, что вы хотите делать с void createTransitionFunction(int TF[][2],char *b,int m)   -  person Weather Vane    schedule 17.03.2015
comment
@jonn Я внес изменения в вопрос, исходя из своего понимания проблемы. Если я ошибся, пожалуйста, не стесняйтесь отменить мою правку, спасибо.   -  person user3386109    schedule 17.03.2015
comment
Я нашел еще одну реализацию конечных строковых автоматов, похожую на мою: sanfoundry.com/ Это переменная NO_OF_CHARS, которую я хочу изменить на 2, которая допускает только 0 и 1 с   -  person jonn    schedule 17.03.2015
comment
Хорошо, это хорошая информация, которую нужно включить в вопрос, чтобы люди могли видеть, что вы пытаетесь сделать. Я откатил свое редактирование, чтобы удалить беспорядок.   -  person user3386109    schedule 17.03.2015


Ответы (1)


Для этого вы можете использовать тип bool, так как bool может хранить только нули и единицы. В качестве альтернативы рассмотрите возможность использования перечисляемого типа, такого как

enum AutomataCharacter {Zero, One};

Использование этих типов по крайней мере вызовет предупреждение компилятора (если вы повысите уровень предупреждения), если вы попытаетесь присвоить ему что-то неправильного типа.

Надеюсь это поможет!

person templatetypedef    schedule 17.03.2015
comment
В C предупреждения не будет (но в C++, поскольку перечисления являются разными типами). - person cremno; 17.03.2015