Computer Programming
Basics
      LECTURE 9
                  Lecture 9: Outline
   Character Arrays/ Character Strings
   Initializing Character Strings. The null string.
   Escape Characters
   Displaying Character Strings
   Inputting Character Strings
   String processing:
       Testing Strings for Equality
       Comparing Strings
       Copying Strings
   Functions in <string.h>
   String to number conversion functions
                  Arrays of characters
   char s[] = { 'H', 'e', 'l', 'l', 'o', '!' };
   To print out the contents of our array - s, we run
    through each element in the array and display it using
    the %c format characters or we will print all together
    using %s for string.
   To process the array s (copy, concatenate two strings,
    etc) we need to have the actual length of the character
    array in a separate variable !
               Character strings
 A method for dealing with character arrays without
  having to worry about precisely how many characters
  you have stored in them:
 Placing a special character at the end of every
  character string. In this manner, the function can
  then determine for itself when it has reached the end
  of a character string after it encounters this special
  character.
 In the C language, the special character that is used to
  signal the end of a string is known as the null
  character and is written as '\0'.
 char s[] = { 'H', 'e', 'l', 'l', 'o', '!', '\0' };
                Example: string length
// Function to count the number of
characters in a string
                                  void main () {
#include <stdio.h>
                                      char s1[] = { 's', 't', 'r', 'i', 'n', 'g',
int stringLength (char string[]){     '\0' };
    int count = 0;                         char s2[] = { 'l', 'e', 'n', 'g', 't',
    while ( string[count] != '\0' )        'h','\0' };
    ++count;                               printf ("%d %d\n", stringLength
                                           (s1),stringLength (s2));
    return count;
                                       }
}
            Initializing character strings
   Initializing a string: char s[] = "Hello!";
   Is equivalent with: char s[] = { 'H', 'e', 'l', 'l', 'o', '!', '\0' };
   or char s[] = { '2', '1', '3', '\0' };
   The null string: A character string that contains no characters
    other than the null character
       char empty[]= "";
                   Escape characters
\a Audible alert
\b Backspace
\f Form feed
\n Newline
\r Carriage return
\t Horizontal tab
\v Vertical tab
\\ Backslash
\" Double quotation mark
\' Single quotation mark
\? Question mark
\nnn Octal character value nnn
\unnnn Universal character name
\Unnnnnnnn Universal character
    name
\xnn Hexadecimal character value nn
         Examples: Escape characters
   printf ("\aSYSTEM SHUT DOWN IN 5 MINUTES!!\n");
   printf ("\\t is the horizontal tab character.\n");
   printf ("\"Hello,\" he said.\n");
         Displaying character strings
   Displaying a string: %s
   printf ("%s\n", s1);
            Inputting character strings
   char string[80];
   scanf ("%s", string); //NOT recommended !
       The scanf function can be used with the %s format characters
        to read in a string of characters up to a blank space, tab
        character, or the end of the line, whichever occurs first
       The string terminator (null character) is appended to string
       If you type in more than 80 consecutive characters to the
        preceding program without pressing the spacebar, the tab key,
        or the Enter (or Return) key, scanf overflows the character
        array !
   Correct use of scanf for reading strings:
   scanf ("%80s", string); // Safer version !
       If you place a number after the % in the scanf format string,
           Example: string processing
#include <stdio.h>
void concat (char result[],   const char str1[], const char str2[]);
void main ()
{
    const char s1[] = "Test " ;
    const char s2[] = "works." ;
    char s3[20];
    concat (s3, s1, s2);
    printf ("%s\n", s3);
}
                Example: string processing
// Function to concatenate two character strings
void concat (char result[], const char str1[], const char str2[])
{
    int i, j;
    // copy str1 to result
    for ( i = 0; str1[i] != '\0'; ++i )
     result[i] = str1[i];
    // copy str2 to result
    for ( j = 0; str2[j] != '\0'; ++j )
     result[i + j] = str2[j];
    // Terminate the concatenated string with a null character
    result [i + j] = '\0';
}
                 Testing strings for equality
bool equalStrings (const char s1[], const char s2[])
{
    int i = 0;
    bool areEqual;
    while ( s1[i] == s2 [i] && s1[i] != '\0' && s2[i] != '\0' )
           ++i;
    if ( s1[i] == '\0' && s2[i] == '\0' )         !!! NOT: s1==s2
           areEqual = true;
    else
           areEqual = false;
    return areEqual;
}
      Alphabetically comparing strings
// Function to compare two character strings
int compareStrings (const char s1[], const char s2[])
{ int i = 0, answer;
answer=0;
while ( s1[i] == s2[i] && s1[i] != '\0'&& s2[i] != '\0' )
          ++i;
if (i!=strlen(s1))                             !!! NOT: s1 < s2
     if ( s1[i] < s2[i] )                      !!! NOT: s1 > s2
          answer = -1; /* s1 < s2 */
     else answer = 1; /* s1 > s2 */
return answer;
}
    Alphabetically comparing strings
void main ()
{
    const char s1[] = "Test " ;
    const char s2[] = "works." ;
    int ok;
    ok=compareStrings(s1, s2);
    if (ok==1) printf("s1>s2");
    else if (ok==-1) printf("s2>s1");
        else printf("s2=s1");
}
                        Copying strings
void copyString(char dest[], char srs[])
{
    int i;
    i=0;                                 !!! NOT: dest = srs
    while ((dest[i] = srs[i]) != '\0')
           i++;
}
                        String functions
   C uses the <string.h> header for string functions
   Most frequently used functions: strlen(), strcat(), strncat(), strcmp(),
    strncmp(), strcpy(), and strncpy().
   strcat (s1, s2)
       Concatenates the character string s2 to the end of s1, placing a null
        character at the end of the final string. The function also returns s1.
   strcmp (s1, s2)
       Compares strings s1 and s2 and returns a value less than zero if s1 is
        less than s2, equal to zero if s1 is equal to s2, and greater than zero if
        s1 is greater than s2.
   strcpy (s1, s2)
       Copies the string s2 to s1, also returning s1.
   strlen (s)
       Returns the number of characters in s, excluding the null character.
                          String functions
   strncat (s1, s2, n)
       Copies s2 to the end of s1 until either the null character is reached or
        n characters have been copied, whichever occurs first. Returns s1.
   strncmp (s1, s2, n)
       Performs the same function as strcmp, except that at most n
        characters from the strings are compared.
   strncpy (s1, s2, n)
       Copies s2 to s1 until either the null character is reached or n
        characters have been copied, whichever occurs first. Returns s1.
                        String functions
   strchr (s, c)
       Searches the string s for the last occurrence of the character c. If
        found, a pointer to the character in s is returned; otherwise, the null
        pointer is returned.
   strstr (s1, s2)
       Searches the string s1 for the first occurrence of the string s2. If
        found, a pointer to the start of where s2 is located inside s1 is
        returned; otherwise, if s2 is not located inside s1, the null pointer is
        returned.
                 getchar() and putchar()
 To read a character: getchar()
 To display a character: putchar()
#include <stdio.h>                 #include <stdio.h>
void main()                        void main()
{                                  {
 char ch;                           char ch;
 while ((ch = getchar()) != '*')    while ((ch = getchar()) != EOF)
          putchar(ch);                       putchar(ch);
                                   }
}
                  getchar() and putchar()
/* Read characters from input over several lines until EOF. Count lines and
characters.*/
#include <stdio.h>
void main()
 {
  int nl, nc;
  char c;
  nl = 0;
  nc = 0;
  while ((c = getchar()) != EOF) {
       nc++;
       if (c == '\n')
           nl++;
  }
  printf("Number of lines in input: %d\n", nl);
  printf("Number of characters in input: %d\n", nc);
}
             gets() and puts()
 To read a string: gets(string)
 To display a string: puts(string)
          #include<stdio.h>
          #include<string.h>
          void main(){
            char string1[25],string2[25];
            printf("Enter first string ");
            gets_s(string1);
            printf("Enter second string ");
            gets_s(string2);
            printf("Our strings are\n");
            puts(string1);
            puts(string2);
           }
            String to number conversions
   Storing a number as a string means storing the digit characters
   Example: the number 213 can be stored in a character string array as the
    digits '2', '1', '3', '\0'. Storing 213 in numeric form means storing it as an
    int.
   Ex:
   1. char s[] = { '2', '1', '3', '\0' };
      printf("sirul meu =%s\n",s); // sirul meu =213
   2. int a[3]={65,66,67};
         printf("%c\n",a[0]);//A
         printf("%c\n",a[1]);//B
         printf("%c\n",a[2]);//C
ASCII character table
                   String to number
                 conversion functions
   <stdlib.h>
   atoi(s) converts string s to a type int value and returns it. The
    function converts characters until it encounters something that is
    not part of an integer.
   atof() converts a string to a type double value and returns it
   atol() converts a string to a type long value and returns it
   printf ("%d\n", atoi("245"));
   printf ("%d\n", atoi("100") + 25);
   printf ("%d\n", atoi("13x5"));