Създавам собствени типове данни с последователности от 1 и 0

Здравейте, това, което се опитвам да направя, е да създам тип данни, който мога да използвам, който се състои само от два знака (0,1). Правя това, за да мога да огранича азбуката в моя алгоритъм за крайни автоматни низове. Програмирам на C, така че се чудех как мога да направя това, тъй като типът данни за знаци е 256, следователно твърде голям.

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

Намерих друга реализация на моя код във връзката по-горе. Това, което се опитвам да направя, е да променя променливата NO_OF_CHARS на 2, така че да могат да се използват само два различни знака.

По-долу е кодът за моя main, ако помага.

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; char b[]=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 и 1s   -  person jonn    schedule 17.03.2015
comment
Добре, това е добра информация, която трябва да бъде включена във въпроса, така че хората да могат да видят какво се опитвате да направите. Върнах редакцията си, за да премахна бъркотията.   -  person user3386109    schedule 17.03.2015


Отговори (1)


Можете да използвате типа bool за това, тъй като bools може да съхранява само нули и единици. Като алтернатива обмислете използването на изброен тип, като напр

enum AutomataCharacter {Zero, One};

Използването на тези типове поне ще повиши предупреждение на компилатора (ако вдигнете нивото на предупреждение), ако се опитате да му присвоите нещо от грешен тип.

Надявам се това да помогне!

person templatetypedef    schedule 17.03.2015
comment
Няма да има предупреждение в C (но в C++, тъй като enum-ите са различни типове). - person cremno; 17.03.2015