Các bạn coi dùm mình sai chỗ nào mà run ko được. Thanks
Code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
void selectSumMenu();
void newstring();
void displayString(char*);
void encodeToHexa(char*);
int teststring(char*);
int main()
{
selectSumMenu();
return 0;
}
int teststring(char* input)
{
int iNumofOne;
int j;
int i = strlen(input) ;
iNumofOne = 0;
for (j=0; j<i; j++)
{
if ((input[j]!='0') && (input[j]!='1'))
{
if (input[j]=='1')
{
iNumofOne++;
if (iNumofOne > 4)
return 0;
}
else iNumofOne = 0;
}
}
return 1;
}
void encodeToHexa(char *input)
{
int iSize2;
char* cPtr;
int j,k=0;
int i = strlen(input);
int a,b,c,d;
iSize2 = i/4;
//cPtr = (char*)malloc((i/4)*sizeof(char));
cPtr = ( char* ) malloc( iSize2 * sizeof( char ) );
for (j=0; j<i; j=j+4,k++)
{
a=b=c=d=0;
if(input[j] == '1')
a = 1 * 8;
if(input[j+1] == '1')
b = 1 * 4;
if(input[j+2] == '1')
c = 1 * 2;
if(input[j+3] == '1')
d = 1;
cPtr[k] = a+b+c+d ;
}
for (k=0; k<iSize2; k++)
{
if (cPtr[k] == 0)
cPtr[k] = '0';
if (cPtr[k] == 1)
cPtr[k] = '1';
if (cPtr[k] == 2)
cPtr[k] = '2';
if (cPtr[k] == 3)
cPtr[k] = '3';
if (cPtr[k] == 4)
cPtr[k] = '4';
if (cPtr[k] == 5)
cPtr[k] = '5';
if (cPtr[k] == 6)
cPtr[k] = '6';
if (cPtr[k] == 7)
cPtr[k] = '7';
if (cPtr[k] == 8)
cPtr[k] = '8';
if (cPtr[k] == 9)
cPtr[k] = '9';
if (cPtr[k] == 10)
cPtr[k] = 'A';
if (cPtr[k] == 11)
cPtr[k] = 'B';
if (cPtr[k] == 12)
cPtr[k] = 'C';
if (cPtr[k] == 13)
cPtr[k] = 'D';
if (cPtr[k] == 14)
cPtr[k] = 'E';
if (cPtr[k] == 15)
cPtr[k] = 'F';
}
printf("Hexa value : ");
for (j=0; j<iSize2; j++)
{
printf("%c", cPtr[j]);
}
return;
}
void selectSumMenu()
{
char *inputchar;
int i;
do
{
printf("\n\t**************************************");
printf("\n\t* MENU *");
printf("\n\t* *");
printf("\n\t* 1. Display existing string *");
printf("\n\t* 2. Ask for new string *");
printf("\n\t* 3. Convert string to Hexa form *");
printf("\n\t* 4. Quit *");
printf("\n\t**************************************");
printf( "\n\tEnter an option (1, 2, 3, or 4): " );
scanf( "%d", &i );
//inputchar = "Testing";
switch ( i )
{
case 1: displayString(inputchar);
break;
case 2: newstring();
break;
case 3: encodeToHexa(inputchar);
break;
case 4: printf( "\n\tThank you for trying!\n" );
break;
default: printf( "\n\tWRONG OPTION!\n" );
}
}
while ( i != 4 );
return;
}
void newstring()
{
char* inputchar;
int iLengthmax;
int iTest;
int i = strlen(inputchar) ;
printf("\n\tDe-allocate existing dynamic memory: ");
if (i != 0)
printf("Not required");
else printf("Required");
printf("\n\tWhat is the estimate length of string? ");
scanf("%d",&iLengthmax);
inputchar = (char*)malloc(iLengthmax*sizeof(char));
printf("\n\tDynamic allocation for array of %d characters", iLengthmax +1);
printf("\n\tEnter your string");
scanf("%s", inputchar);
iTest = teststring(inputchar);
if (iTest == 0)
{
printf("\n\tThe string is not convertible!");
printf("\n\tDe-allocate dynamic memory");
free(inputchar);
printf("\n\tAssign 0 to the pointer");
inputchar = 0;
}
else printf("\n\tThe string is convertible!");
return;
}
void displayString( char* inputchar )
{
int iLen;
int i;
iLen = strlen( inputchar );
if ( iLen != 0 )
{
printf( "\nThere is a string!\n" );
for ( i = 0; i < iLen; i++ )
{
printf( "\n%c", *( inputchar + i ) ); //input[ i ]
}
}
else
{
printf( "\nThere is no string!\n" );
}
return;
}