Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Strings 180329060622

Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

Strings

 A string is a sequence of characters treated as a group. Any group of


characters defined between double quotation marks is a string constant.
 We have already used some string literals:
 “filename”
 “output string”
 Character strings are often used to build meaningful and readable programs.
Strings are important in many programming contexts:
 names
 other objects (numbers, identifiers, etc.)
 Operations on strings include: Reading and writing strings, combining
strings together, copying one string to another, comparing strings for
equality, extracting a portion of a string.
Outline
Strings
Representation in C
String Literals
String Variables
String Input/Output
printf, scanf, gets, fgets, puts, fputs
String Functions
strlen, strcpy, strncpy, strcmp, strncmp, strcat, strncat, strchr, strrchr,
strstr, strspn, strcspn, strtok
Reading from/Printing to Strings
sprintf, sscanf
Strings in C
No explicit type, instead strings are maintained as arrays of
characters
Representing strings in C
 stored in arrays of characters
 array can be of any length
 end of string is indicated by a delimiter, the zero character ‘\0’

"A String" A S t r i n g \0
String Literals
String literal values are represented by sequences of
characters between double quotes (“)
Examples
“” - empty string
“hello”
“a” versus ‘a’
‘a’ is a single character value (stored in 1 byte) as the
ASCII value for a
“a” is an array with two characters, the first is a, the second
is the character value \0
Duplicate String Literals
Each string literal in a C program is stored at a
different location
So even if the string literals contain the same string,
they are not equal (in the == sense)
Example:
char string1[6] = “hello”;
char string2[6] = “hello”;
but string1 does not equal string2 (they are stored at
different locations)
Declaring and Initializing String Variables
 Allocate an array of a size large enough to hold the string (plus 1 extra value
for the delimiter)
 Char string_name[size];
Example: char city[10];
 Examples (with initialization):
char str1[6] = “Hello”;
char str2[] = “Hello”;
char str4[6] = {‘H’,’e’,’l’,’l’,’o’,’\0’};
 Note, each variable is considered a constant in that the space it is connected
to cannot be changed
str1 = str2; /* not allowable, but we can copy the contents
of str2 to str1 (more later) */
• When the compiler assigns a character string to a
character array it automatically supplies a NULL (\o)
character at the end of the string.
 We can declare the size much larger than the string size in the initializer.
That is the statement:
char str [10]=“GOOD”; is permitted.
 However the following declaration is illegal. Char str2[3]=“Good”; This
will result in compile time error.
 We cannot separate the initialization from declaration. i.e. char str3[5];
str3=“Good”;
 Similarly, char s1[4]=“abc”;
cahr s2[4];
s2=s1; is not allowed. An array name cannot be used as the left
operand of the assignment operator.
“Why do we need a terminating NULL
character?”
A string is not a datatype in C but it is considered a data
structure stored in an array. The string is a variable length
structure and is stored in a fixed length array. The array
size is not always the size of the string and most often it is
much larger than the string stored in it. Therefore, the last
element of the array need not represent the end of the
string. We need some way to determine the end of the
string data and the NULL character serves as the “end of
string”.
Changing String Variables
Can change parts of a string variable
char str1[6] = “hello”;
str1[0] = ‘y’;
/* str1 is now “yello” */
str1[4] = ‘\0’;
/* str1 is now “yell” */
Important to retain delimiter (replacing str1[5] in the
original string with something other than ‘\0’ makes a
string that does not end)
Have to stay within limits of array
Reading Strings from terminal
Use %s field specification in scanf to read string:
ignores leading white space
reads characters until next white space encountered
C stores null (\0) char after last non-white space character.
Example:
char Name[11];
scanf(“%s”,Name);
‘&’ is not required before the variable name. The unused
locations are filled with garbage.
We can also specify the field width using the form %ws in the
scanf statement for reading a specified number of characters
from the input string. Ex: scanf(“%ws”, name);
Reading Strings from terminal(cont)
Can use the width value in the field specification to
limit the number of characters read:
char Name[11];
scanf(“%10s”,Name);
Remember, you need one space for the \0
width should be one less than size of array
Strings shorter than the field specification are read
normally, but C always stops after reading 10
characters
Reading Strings from terminal(cont)
%s and %ws can read strings without white spaces i.e.
they cannot be used for reading a text containing more
than one word. However we can use the following code to
read a line:
char line[80];
scanf(“[^\n]”, line);
printf(“%s”, line);
String Output
Use %s field specification in printf:
characters in string printed until \0 encountered
char Name[10] = “Rich”;
printf(“|%s|”,Name); /* outputs |Rich| */
Can use width value to print string in space:
printf(“|%10s|”,Name); /* outputs | Rich| */
Use - flag to left justify:
printf(“|%-10s|”,Name); /* outputs |Rich | */
Arithmetic operations on characters
Whenever a character constant or character variable is
used in an expression, it is automatically converted into an
integer value by the system.
Example: x=‘a’; printf(“%d\n”,x); will display 97 on
screen which is ASCII value of ‘a’ in lower case.
Ex-2 x=‘z’-1 will assign value 121 to variable x.
Ex-3 ch>=‘A’ && ch<=‘Z’ would test whether the
character contained in variable ch is an upper case letter.
C has a function “atoi” that converts a string of digits into
their integer values. It is stored in <stdlib.h> Ex:
number=“1988”;
year=atoi(number);
Putting strings together
The process of combining two strings together is called
concatenation.
String3=string1+string2; is not valid.
We can combine the strings using the following program:
include <stdio.h>
int main()
{
char s1[100], s2[100], i, j;
printf("Enter first string: ");
scanf("%s", s1);
printf("Enter second string: ");
scanf("%s", s2); // calculate the length of string s1 // and store it in i
for(i = 0; s1[i] != '\0'; ++i);
for(j = 0; s2[j] != '\0'; ++j, ++i)
{ s1[i] = s2[j]; }
s1[i] = '\0';
printf("After concatenation: %s", s1);
return 0;
}
String Copy:
#include <stdio.h>
int main()
{
char s1[100], s2[100], i;
printf("Enter string s1: ");
scanf("%s",s1);
for(i = 0; s1[i] != '\0'; ++i)
{
s2[i] = s1[i];
}
s2[i] = '\0';
printf("String s2: %s", s2);
return 0;
}
ASSIGNMENT

WAP to compare two strings without using string


manipulation functions.
The most common functions used
from the library are:
1. strlen("name of string")
2. strcpy( dest, source)
3. strcmp( string1, string2 )
4. strstr( str1, str2 )
strlen( string )
Declaration and usage of strlen() function
It is one of the most useful functions used from this
library, whenever we need the length of the string say
"str1"
we write it as
int len;
len = strlen(str1);
len will be the length of the string "str1".(it will include
all the spaces and characters in the string except the
NULL('\0') character.
strcpy() function
strcpy( dest, source)
This function copies the string "source" to string "dest".
Declaration
strcpy( str2, str1 );
strcmp( str1, str2 )
This function is used to compare two strings "str1" and
"str2". this function returns zero("0") if the two compared
strings are equal, else some none zero integer.
Declaration and usage of strcmp() function
strcmp( str1 , str2 ); //declaration
if( strcmp( str1, str2 )==0)
{ printf("string %s and string %s are equal\n",str1,str2); }
else printf("string %s and string %s are not
equal\n",str1,str2);
Return value
- if Return value if < 0 then it indicates str1 is less than str2
- if Return value if > 0 then it indicates str2 is less than str1
- if Return value if = 0 then it indicates str1 is equal to str2
strstr(str1, str2)
This library function finds the first occurrence of the substring str2
in the string str1. The terminating '\0' character is not compared.
Declaration
strstr( str1, str2); - str1: the main string to be scanned. - str2: the
small string to be searched in str1.
// let say str2="speed"; //function can also be written as strstr(str1,
"speed" );
This function is very useful in checking whether str2 is a substring
of str1 or not.
Return value
This function returns a pointer to the first occurrence in str1 of any
of the entire sequence of characters specified in str2, or a NULL
pointer if the sequence is not present in str1.
Strcat()
Used for string concatenation(joining)
It takes two arguments i.e. 2 strings
Syntax: strcat(string1,string2);
After concatenation the resultant string is stored in first
string.
Exercise: WAP to input two strings, concatenate it and
print the resultant string.

You might also like