iBRabbit
iBRabbit

Reputation: 69

How to convert a character into a number

I have a homework problem. It requires me to convert a word into uppercase and several characters have to be converted to decimal for example : "Hello my NamE is FeLix" --> "H3LL0 MY N4M3 15 F3L1X". So, these characters had to be converted :

I = 1
S = 5
E = 3
O = 0 
A = 4
etc.

How to convert it? I already tried to convert it to capslock but i cannot convert it into decimal.

I already tried to convert the words into uppercase, but have no idea how to convert the character into numbers.

int main()
    {
        char sentence[200];
        int sentencelength = strlen(sentence);

    // Ambil data user
    scanf("%s",&sentence); getchar();

    // Cek satu persatu pake for
    for (int i= 1; i <= sentencelength; i++) {
        if(sentence[i] >= 'a' && sentence[i] <= 'z') {
            char uppercase = sentence[i] + 'A' - 'a';
            printf("%c",uppercase);
        }
    }

  getchar();
  return 0;
}

There is no error, but I just have no idea how to convert it.

Upvotes: 0

Views: 224

Answers (3)

Ian Abbott
Ian Abbott

Reputation: 17403

C arrays start at index 0, not 1, so change the for loop bounds to:

    for (int i = 0; i < sentencelength; i++) {

You can use toupper (declared by #include <ctype.h>) to convert a character from lowercase to uppercase, leaving non-alphabetic characters alone. It is only defined for values representable by an unsigned char or for the value EOF.

        char l33t = sentence[i];
        if (l33t == (unsigned char)l33t)
            l33t = toupper(l33t);

You can use a switch statement to replace certain uppercase letters with digits:

        switch (l33t) {
        case 'I':
            l33t = '1';
            break;
        case 'S':
            l33t = '5';
            break;
        case 'E':
            l33t = '3';
            break;
        case 'O':
            l33t = '0';
            break;
        case 'A':
            l33t = '4';
            break;
        }

Rather than using scanf to read a whole word of input into a buffer, an alternative is to read the input a character at a time. Here is an example program that behaves as a filter:

#include <stdio.h>
#include <ctype.h>

static int convert(int ch)
{
    if (ch  == (unsigned char)ch)
        ch = toupper(ch);
    switch (ch) {
    case 'I': ch = '1'; break;
    case 'S': ch = '5'; break;
    case 'E': ch = '3'; break;
    case 'O': ch = '0'; break;
    case 'A': ch = '4'; break;
    }
    return ch;
}

int main(void)
{
    int ch;

    while ((ch = getchar()) != EOF) {
        ch = convert(ch);
        putchar(ch);
    }
    return 0;
}

The above will convert the whole input until it sees end-of-file. To terminate after a single line, just add a check for a newline character to break out of the while loop.

Upvotes: 1

eyalka
eyalka

Reputation: 21

create an array of characters: [4BCD3F....Z] and an array of sources: [abcd...z]

run on your string, replace each character found in index I with the same character in the first array, if it's not found return the character as is.

crude, simple, works

Also, if someone complain on the calculation complexity, since you have fixed number of letters in the arrays A to Z , the complexity is O(N*M) when M is const, hence O(N) anyway

Upvotes: 0

kiran Biradar
kiran Biradar

Reputation: 12732

You can use switch as below.

switch(uppercase ) {
   case 'I':
      uppercase = '1';
   break;

   case 'S':
      uppercase = '5';
   break;

   case 'E':
      uppercase = '3';
   break;

   …

  }

Upvotes: 5

Related Questions