コード例 #1
0
int main() {
	int currentNum = 20;
	
	while (!validNum(currentNum)) currentNum += 20;
	
	printf("%d\n", currentNum);
	
	return 0;
}
コード例 #2
0
ファイル: stdio.c プロジェクト: tcolloca/loco-mouseOS
static int getIntFromString(char c, int * dest, int * i, int base, const char * src, int * j) {
	if( c == cut ) {
		return 1;
	} else if( !validNum(c, base) ) {
		return 0;
	}

	char chr = src[(*j)++];
	int ret = getIntFromString(chr, dest, i, base, src, j);
	
	if( isdigit(c) )
		*dest += (c - '0') * pow(base, (*i)++); 
	else if( isupper(c) )
		*dest += (c - 'A' + 10) * pow(base, (*i)++); 
	else
		*dest += (c - 'a' + 10) * pow(base, (*i)++); 
	
	return ret;
}
コード例 #3
0
ファイル: stdio.c プロジェクト: tcolloca/loco-mouseOS
static int getInt(char c, int * dest, int * i, int base) {
	if( c == cut ) {
		return 1;
	} else if( !validNum(c, base) ) {
		return 0;
	}

	char chr = getchar();
	int ret = getInt(chr, dest, i, base);
	
	if( isdigit(c) )
		*dest += (c - '0') * pow(base, (*i)++); 
	else if( isupper(c) )
		*dest += (c - 'A' + 10) * pow(base, (*i)++); 
	else
		*dest += (c - 'a' + 10) * pow(base, (*i)++); 
	
	return ret;
}
コード例 #4
0
ファイル: stdio.c プロジェクト: tcolloca/loco-mouseOS
int vsscanf(const char * src, const char * fmt, va_list args) {

	int read = 0, i = 0, j = 0, type, state = CHAR;
	int sign, hasSign, base;
	char * str, * sdest;	
	char c;
	while( fmt[i] != 0 ) {
		switch( state ) {
			case CHAR:
				switch( fmt[i] ) {
					case '%':
						state = PERCENTAGE;
						break;
					case ' ':
					default:
						c = src[j++];
						if( c != fmt[i] )
							return read;
				}
				i++;
				break;
			case PERCENTAGE:
				switch( fmt[i] ) {
					case '%':
						state = CHAR;
						c = src[j++];
						if( c != fmt[i] )
							return read;
						i++;
						break;
					case 'd':
						state = GETINT;
						type = DEC;
						break;
					case 'h':
					case 'x':
						state = GETINT;
						type = HEX;
						break;
					case 'o':
						state = GETINT;
						type = OCT;
						break;
					case 'c':
						state = GETCHAR;
						break;
					case 's':
						state = GETSTRING;
						break;
					default:
						return -1; //TODO: ERROR
				}
				break;
			case GETINT:
				base = 10;
				hasSign = 0;
				sign = 1;
				i++;
				cut = fmt[i++];
				state = CHAR;
				c = src[j++];
				switch( c ) {
					case '-':
						sign = -1;
					case '+':
						c = src[j++];
						hasSign = 1;
						break;
				}

				if( hasSign && c == cut ) {
					return read;
				} else if( !hasSign && c == cut ) {					
					break;
				}
 
				if( type == OCT || type == HEX) {
					if( c != '0' ) {
						return read;
					}
					c = src[j++];
			
					if( type == HEX ) {
						if( c != 'x' )
							return read;
						c = src[j++];
						base = 16;
					} else
						base = 8;
					
				}
				
				if( !validNum(c, base) ) {
					return read;
				} else {
					int * dest = va_arg(args, int *);
					int k = 0;
					int ret;
					*dest = 0;
					ret = getIntFromString(c, dest, &k, base, src, &j);
					*dest *= sign;
					read++;
					if( !ret ) {
						return read;
					} 
				}
				break;
			case GETCHAR:
				state = CHAR;
				c = src[j++];
				if( !isgraph(c) )
					return read;
				*va_arg(args, char *) = c;
				i++;
				read++;
				break;
			case GETSTRING:	
				i++;		
				cut = fmt[i++];
				state = CHAR;
				c = src[j++];
				sdest = va_arg(args, char *);
				str = sdest;	
					
				while( c != cut && isgraph(c) ) {
					*(sdest++) = c;
					c = src[j++];					
				}	
				*sdest = 0;
					
				if( (*str) )
					read++;

				if( c != cut )
					return read;
				
				break;		
		}
	}
	return read;
}
コード例 #5
0
ファイル: Validation.cpp プロジェクト: darrenhp/AlgoSolution
bool validTerm(const string &expr, int &L){
    if (L >= expr.size()) return false;
    if (expr[L] == '(') return validParen(expr, L);
    else return validNum(expr, L); 
}