In: Computer Science
Write a C program that loops and asks a user to enter a an alphanumeric phone number and converts it to a numeric one. No +1 at the beginning. You can put all code in one quiz1.c file or put all functions except main in phone.c and phone.h and include it in quiz1.c Submit your *.c and .h files or zipped project */ #pragma warning (disable: 4996) //windows #include <stdio.h> #include <string.h> #include <stdbool.h> #include <ctype.h> enum { MaxLine = 255 }; bool isValid(char line[]) { //line is a string //returns true if line has 10 alnum characters //false otherwise } void toNumeric(char line[]) { //line is a string //use the switch statement we did in last lectures // (800) GOT - milk ; (800)GOT.milk, etc //convert letters to digits; leave rest as is. } void puncts_to_spaces(char line[]) { //line is a string //convert punctuations to spaces: use ispunct } void remove_spaces(char line[]) { //line is a string //remove the spaces and move the digits to the left //and put '\0' after the last digit } void format_number(char line[]) { //assuming the line size is big //insert dash or period after 3 and 6 size_t size = strlen(line); sprintf_s(line, MaxLine, "%c%c%c-%c%c%c-%c%c%c%c", line[0], line[1], line[2], line[3], line[4],line[5], line[6], line[7], line[8], line[9]); //you can also do this instead //0123456789\0 //012-345-6789\0 //\0 is one char '\0' /* line[12] = '\0'; line[11] = line[9]; line[10] = line[8]; line[9] = line[7]; line[8] = line[6]; line[7] = '-'; line[6] = line[5]; line[5] = line[4]; line[4] = line[3]; line[3] = '-'; */ } int main(void) { enum { MaxLen = 255 }; printf("Welcome to Quiz1\n"); //read a string from the keyboard and process it while (true) { //code inside the loop char s1[MaxLine]; puts("Enter an alphanumeric phone number (enter to quit) "); fgets(s1, MaxLen, stdin); //stdin from keyboard //fgets reads text up to MaxLen-1, EOL including EOL s1[strlen(s1) - 1] = '\0'; //remove \n by replacing it with '\0' size_t len = strlen(s1); if (len == 0) break; if (isValid(s1)) { toNumeric(s1); printf("after toNumeric: "); puts(s1); //fputs(s1, stdout); puncts_to_spaces(s1); printf("after puncts_to_spaces: "); puts(s1); remove_spaces(s1); printf("after remove_spaces: "); puts(s1); format_number(s1); printf("after format_number: "); puts(s1); } else printf("invalid alphanumeric phone number\n"); } return (0); }
Please find the answer below.
Please do comments in case of any issue. Also, don't forget to rate
the question. Thank You So Much.
code.c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
enum { MaxLine = 255 };
bool isValid(char line[])
{
int count = 0;
while(line[count]!='\0'){
if(!((line[count]>='a'
&& line[count]<='z')
|| (line[count]>='A' &&
line[count]<='Z')
|| (line[count]>='0' &&
line[count]<='9'))){
return 0;
}
count++;
}
if(count==10){
return 1;
}
return 0;
}
void toNumeric(char line[])
{
//line is a string
//use the switch statement we did in last
lectures
// (800) GOT - milk ; (800)GOT.milk, etc
//convert letters to digits; leave rest as is.
int count = 0;
while(line[count]!='\0'){
switch
(toupper(line[count]))
{
case 'A':
case 'B':
case 'C':
line[count]='2';
break;
case 'D':
case 'E':
case 'F':
line[count]='3';
break;
case 'G':
case 'H':
case 'I':
line[count]='4';
break;
case 'J':
case 'K':
case 'L':
line[count]='5';
break;
case 'M':
case 'N':
case 'O':
line[count]='6';
break;
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
line[count]='8';
break;
case 'W':
case 'X':
case 'Y':
case 'Z':
line[count]='9';
break;
}
count++;
}
}
void puncts_to_spaces(char line[])
{
//line is a string
//convert punctuations to spaces: use ispunct
int count = 0;
while(line[count]!='\0'){
if(ispunct(line[count])){
line[count] = '
';
}
count++;
}
}
void remove_spaces(char line[])
{
//line is a string
//remove the spaces and move the digits to the
left
//and put '\0' after the last digit
int count = 0;
while(line[count]!='\0'){
if(line[count]==' '){
int count2 =
0;
while(line[count2]!='\0'){
line[count2] = line[count2+1];
count2++;
}
}
count++;
}
}
void format_number(char line[])
{
//assuming the line size is big
//insert dash or period after 3 and 6
size_t size = strlen(line);
sprintf(line, "%c%c%c-%c%c%c-%c%c%c%c", line[0],
line[1], line[2],
line[3],
line[4],line[5], line[6], line[7], line[8], line[9]);
//you can also do this instead
//0123456789\0
//012-345-6789\0
//\0 is one char '\0'
/*
line[12] = '\0';
line[11] = line[9];
line[10] = line[8];
line[9] = line[7];
line[8] = line[6];
line[7] = '-';
line[6] = line[5];
line[5] = line[4];
line[4] = line[3];
line[3] = '-';
*/
}
int main(void)
{
enum { MaxLen = 255 };
printf("Welcome to Quiz1\n");
//read a string from the keyboard and process
it
while (true)
{
//code inside the loop
char s1[MaxLine];
puts("Enter an alphanumeric phone
number (enter to quit) ");
fgets(s1, MaxLen, stdin); //stdin
from keyboard
//fgets reads text up to MaxLen-1,
EOL including EOL
s1[strlen(s1) - 1] = '\0'; //remove
\n by replacing it with '\0'
size_t len = strlen(s1);
if (len == 0)
break;
if (isValid(s1))
{
toNumeric(s1);
printf("after
toNumeric: ");
puts(s1);
//fputs(s1, stdout);
puncts_to_spaces(s1);
printf("after
puncts_to_spaces: ");
puts(s1);
remove_spaces(s1);
printf("after
remove_spaces: ");
puts(s1);
format_number(s1);
printf("after
format_number: ");
puts(s1);
}
else
printf("invalid
alphanumeric phone number\n");
}
return (0);
}