Character Data and Strings

Tom Kelliher, CS17

May 13, 1996

Character Data

The sizeof() function.

Collating sequence:

How the characters in a character set ``compare'' to each other.

ASCII collating sequence:

  0 nul    1 soh    2 stx    3 etx    4 eot    5 enq    6 ack    7 bel
  8 bs     9 ht    10 nl    11 vt    12 np    13 cr    14 so    15 si
 16 dle   17 dc1   18 dc2   19 dc3   20 dc4   21 nak   22 syn   23 etb
 24 can   25 em    26 sub   27 esc   28 fs    29 gs    30 rs    31 us
 32 sp    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  ~   127 del

char Conversions

Traditionally, character data is stored in char variables, but int formal parameters are used.

The conversion is automatic.

chars can be used alongside other types in arithmetic expressions.

tolower()

This function, if passed an upper case character, returns the lower case equivalent. Any other character is returned as-is.

Since a--z and A--Z are adjacent in the collating sequence and the lowercase letters are after the uppercase letters, we can convert an uppercase letter to the corresponding lowercase letter just by adding the difference of 'a' and 'A'.

int tolower(int c)
{
   if ('A' <= c && c <= 'Z')
      return c + 'a' - 'A';
   else
      return c;
}

isdigit()

Return 1 if int argument is an ASCII digit, otherwise return 0.

int isdigit(int c)
{
   return '0' <= c && c <= '9';
}

Reading a Number

A number must be converted from a character sequence to a numeric value.

Numbers are read from most significant digit to least significant digit, so we multiply the ``number so far'' by 10 every time we read a digit.

To convert the ASCII code for a digit to a numeric value, subtract '0' from the ASCII character.

int getNumber(void)
{
   int value = 0;
   char c;

   // cin.get() returns one character from cin.
   while (isdigit(c = cin.get()))
      value = 10 * value + c - '0';

   cin.unget();   // Puts last character back on cin.

   return value;
}

Character I/O

Assume:

char c;

Character Handling Functions

Must include ctype.h.

Character Strings

A sequence of characters terminated by a null character ('\0').

Assume:

const int LINE_LENGTH = 80;

char s[LINE_LENGTH];

Details of getline()

Prototype:

istream::getline(char in[], int max, int term = '\n');
Use and effect.

String Function Exercises

These functions are provided in string.h.

Write the functions:



Thomas P. Kelliher
Sun May 12 15:06:35 EDT 1996
Tom Kelliher