In this tutorial you will learn about Initializing Strings, Reading Strings from the terminal, Writing strings to screen, Arithmetic operations on characters, String operations (string.h), Strlen() function, strcat() function, strcmp function, strcmpi() function, strcpy() function, strlwr () function, strrev() function and strupr() function.
In C language, strings are stored in an array of char type along with the null terminating character "\0" at the end. In other words to create a string in C you create an array of chars and set each element in the array to a char value that makes up the string. When sizing the string array you need to add plus one to the actual size of the string to make space for the null terminating character, “\0”
Syntax to declare a string in C:
char fname[4];
The above statement declares a string called fname that can take up to 3 characters. It can be indexed just as a regular array as well.
fname[] = {‘t’,’w’,’o’};
Character | t | w | o | \0 |
ASCII Code | 116 | 119 | 41 | 0 |
The last character is the null character having ASCII value zero.
Initializing Strings
To initialize our fname string from above to store the name Brian,
char fname[31] = {"Brian"};
You can observe from the above statement that initializing a string is same as with any array. However we also need to surround the string with quotes.
Writing Strings to the Screen
To write strings to the terminal, we use a file stream known as stdout. The most common function to use for writing to stdout in C is the printf function, defined as follows:
int printf(const char *format, ...);
To print out a prompt for the user you can:
printf("Please type a name: \n");
The above statement prints the prompt in the quotes and moves the cursor to the next line.
If you wanted to print a string from a variable, such as our fname string above you can do this:
printf("First Name: %s", fname);
You can insert more than one variable, hence the “…” in the prototype for printf but this is sufficient. Use %s to insert a string and then list the variables that go to each %s in your string you are printing. It goes in order of first to last. Let’s use a first and last name printing example to show this:
printf("Full Name: %s %s", fname, lname);
The first name would be displayed first and the last name would be after the space between the %s’s.
Reading Strings from the Terminal
When we read a string from the terminal we read from a file stream known as stdin. *nix users are probably familiar with this, it’s how you can type a program name into the terminal and pass it arguments also.
Say we want to allow the user to enter a name from stdin. Aside from taking the name as a command line argument, we can use the scanf function which has the following prototype:
int scanf(const char *format, ...);
Note the similarity to printf.
Quick example to tie the last few sections together.
getname.c:
#include <stdio.h>
void main() {
char fname[30];
char lname[30];
printf("Type first name:\n");
scanf("%s", fname);
printf("Type last name:\n");
scanf("%s", lname);
printf("Your name is: %s %s\n", fname, lname);
}
We declare two strings fname and lname. Then we use the printf function to prompt the user for a first name. The scanf function takes the input from stdin and automatically exits once the user presses enter. Then we repeat the above sequence except using the last name this time. Finally we print the full name that was typed back to stdout. Should look something like this:
Arithmetic Operations on Strings
Characters in C can be used just like integers when used with arithmetic operators. This is nice, for example, in low memory applications because unsigned chars take up less memory than do regular integers as long as your value does not exceed the rather limited range of an unsigned char.
Let us cut to our example,
charmath.c:
#include <stdio.h>
void main() {
unsigned char val1 = 20;
unsigned char val2 = 30;
int answer;
printf("%d\n", val1);
printf("%d\n", val2);
answer = val1 + val2;
printf("%d + %d = %d\n", val1, val2, answer);
val1 = 'a';
answer = val1 + val2;
printf("%d + %d = %d\n", val1, val2, answer);
}
First we make two unsigned character variables and give them (rather low) number values. We then add them together and put the answer into an integer variable. We can do this without a cast because characters are an alphanumeric data type. Next we set var1 to an expected character value, the letter lowercase a. Now this next addition adds 97 to 30, why?
Because the ASCII value of lowercase a is 97. So it adds 97 to 30, the current value in var2. Notice it did not require casting the characters to integers or having the compiler complain. This is because the compiler knows when to automatically change between characters and integers or other numeric types.
String Operations
Character arrays are a special type of array that uses a “\0” character at the end. As such it has it is own header library called string.h that contains built-in functions for performing operations on these specific array types.
You must include the string header file in your programs to utilize this functionality.
#include <string.h>
We will cover the essential functions from this library over the next few sections.
Length of a String
Use the strlen function to get the length of a string minus the null terminating character.
int strlen(string);
If we had a string, and called the strlen function on it we could get its length.
char fname[30] = {"Bob"};
int length = strlen(fname);
This would set length to 3.
Concatenation of Strings
The strcat function appends one string to another.
char *strcat(string1, string2);
The first string gets the second string appended to it. So for example to print a full name from a first and last name string we could do the following:
char fname[30] = {"Bob"};
char lname[30] = {"by"};
printf("%s", strcat(fname, lname));
The output of this snippet would be “Bobby.”
Compare Two Strings
Sometimes you want to determine if two strings are the same. For this we have the strcmp function.
int strcmp(string1, string2);
The return value indicates how the 2 strings relate to each other. if they are equal strcmp returns 0. The value will be negative if string1 is less than string2, or positive in the opposite case.
For example if we add the following line to the end of our getname.c program:
printf("%d", strcmp(fname, lname));
When run on a Linux computer with the following first and last name combinations, the program will yield the following output.
First name: Bob, last name: bob, output: -1.
First name: bob, last name: Bob, output 1.
First name: Bob, last name: Bob, output 0.
Compare Two Strings (Not Case Sensitive)
If you do not care whether your strings are upper case or lower case then use this function instead of the strcmp function. Other than that, it’s exactly the same.
int strcmpi(string1, string2);
Imagine using this function in place of strcmp in the above example, all of the first and last combinations would output 0.
Copy Strings
To copy one string to another string variable, you use the strcpy function. This makes up for not being able to use the “=” operator to set the value of a string variable.
strcpy(string1, string2);
To set the first name of our running example in code rather than terminal input we would use the following:
strcpy(fname, "Bob");
Converting Uppercase Strings to Lowercase Strings
This function is not part of the ANSI standard and therefore strongly recommended against if you want your code to be portable to platforms other than Windows.
strlwr(string);
This will convert uppercase characters in string to lowercase. So “BOBBY” would become “bobby”.
Reversing the Order of a String
This function is not part of the ANSI standard and therefore strongly recommended against if you want your code to be portable to platforms other than Windows.
strrev(string);
Will reverse the order of string. So if string was “bobby”, it would become “ybbob”.
Converting Lowercase Strings to Uppercase Strings
This function is not part of the ANSI standard and therefore strongly recommended against if you want your code to be portable to platforms other than Windows.
strupr(string);This will convert lowercase characters in string to uppercase. So “bobby” would become “BOBBY”.