This lab serves multiple goals:
char
datatype,Characters are represented by integers: you can read on
wikipedia a
mapping between the glyphs (e.g., space, A
, !
, etc.) and decimal
values, to be read as “integer code” (e.g., 32, 33, 34, etc.).
In the referenced table on wikipedia, each character’s integer code is given for different numeral systems:
The decimal system is what we use every day, but computer programs occasionally use other numerical systems. For that system, it gives (no need to memorize this information, this is simply for your general awareness):
Decimal representation | Glyph (character) |
---|---|
32 | space |
33 | ! |
34 | ” |
35 | # |
36 | $ |
37 | % |
38 | & |
39 | ’ |
40 | ( |
41 | ) |
42 | * |
43 | + |
44 | , |
45 | - |
46 | . |
47 | / |
48 | 0 |
49 | 1 |
50 | 2 |
51 | 3 |
52 | 4 |
53 | 5 |
54 | 6 |
55 | 7 |
56 | 8 |
57 | 9 |
58 | : |
59 | ; |
60 | < |
61 | = |
62 | > |
63 | ? |
64 | @ |
65 | A |
66 | B |
67 | C |
68 | D |
69 | E |
70 | F |
71 | G |
72 | H |
73 | I |
74 | J |
75 | K |
76 | L |
77 | M |
78 | N |
79 | O |
80 | P |
81 | Q |
82 | R |
83 | S |
84 | T |
85 | U |
86 | V |
87 | W |
88 | X |
89 | Y |
90 | Z |
91 | [ |
92 | \ |
93 | ] |
94 | ^ |
95 | _ |
96 | ` |
97 | a |
98 | b |
99 | c |
100 | d |
101 | e |
102 | f |
103 | g |
104 | h |
105 | i |
106 | j |
107 | k |
108 | l |
109 | m |
110 | n |
111 | o |
112 | p |
113 | q |
114 | r |
115 | s |
116 | t |
117 | u |
118 | v |
119 | w |
120 | x |
121 | y |
122 | z |
123 | { |
124 | | |
125 | } |
126 | ~ |
Note that the characters are divided into groups and that there are 95 printable characters.
Copy the following snippet of code in a Main
method:
int intVar = (int)'C';
char charVar = (char)84;
Console.WriteLine($"'C' is represented as {intVar}");
Console.WriteLine($"{charVar} corresponds to the value 84");
And note that we can explicitly convert int
into char
, and char
into int
, but the conversion from char
to int
could be done
implicitly by C#; replace the previous first line with:
int intVar = 'C';
and note that your program still compiles.
Can you also convert implicitly int
into char
?
Next, write code to determine the int
values for the following
characters:
char
value | int
value |
:: | :: |
w
| 119 |
A
| |
5
| |
#
| |
Also determine what characters the following integers (in the decimal system) represent:
int
value | char
value |
:: | :: |
49
| |
104
| |
89
| |
You can test if a character is equal to another by using ==
, as for
integer values. This is particularly useful when we want to ask the user
for a “yes” / “no” decision.
Write a program that
ReadKey()
method:
Console.ReadKey().KeyChar
will return a char
that you can then
store into a variable and manipulate.'Y'
or 'y'
,'N'
or
'n'
,Exactly as $65$ is less than $97$, the character associated with $65$,
A
, is less than the character associated with $97$, a
.
You can convince yourself by executing the following code:
if ('A' > 'a')
{
Console.Write("'A' is greater than 'a'.");
}
else
{
Console.Write("'A' is less than 'a'.");
}
that displays “‘A’ is less than ‘a’.”.
Implement the following short program to practice this concept.
Ask the user to enter a lowercase character.
Check that the character is within the a - z range (it is a lowercase character),
When it is not in this range, display “The character ‘X’ is not a
lowercase character”, where X
is replaced by the character they
entered,
Otherwise, perform the following steps:
'n'
, display “You entered ‘n’.”'n'
, display “The character you
entered is a lowercase letter before ‘n’.”'n'
, display “The character you
entered is a lowercase letter after ‘n’.”Comparing strings cannot be done with >
and <
operators (we can use
==
, however). To compare them, we have to use the
CompareOrdinal
method of the
String
class.
It works as follows:
if (String.CompareOrdinal("A", "a") > 0)
{
Console.Write("\"A\" is greater than \"a\".");
}
else
{
Console.Write("\"A\" is less than \"a\".");
}
Note that CompareOrdinal
returns an integer, that we then compare with
$0$.
In the previous example, we tested a string made of only one character, but we can compare arbitrarily complex strings:
if (String.CompareOrdinal("Augusta", "August") > 0) {
Console.Write("\"Augusta\" is greater than \"August\".");
} else {
Console.Write("\"Augusta\" is less than \"August\".");
}
To conclude with this topic, note that the integer returned actually has a precise value.
Examine the following code to understand it.
if (String.CompareOrdinal("A", "a") == ((int)'A' - (int)'a'))
Console.WriteLine("Ok, I get it now");
if (String.CompareOrdinal("Ab", "az") == (((int)'A' + (int)'b') - ((int)'a' + (int)'z')))
Console.WriteLine("Yes, I really do.");
else if (String.CompareOrdinal("Ab", "az") == ((int)'A' - (int)'a'))
Console.WriteLine("Or do I?");
if (String.CompareOrdinal("ABCDEf", "ABCDEF") == (int)'f' - (int)'F')
Console.WriteLine("Ok, now I'm good.");
Do you understand how the returning value is computed for these strings?