Chapter 10 Strings and Pointers
-
Upload
gareth-kaufman -
Category
Documents
-
view
48 -
download
4
description
Transcript of Chapter 10 Strings and Pointers
1
Chapter 10 Strings and Pointers
2
Introduction
String Constant Example: printf(“Hello”);
“Hello” : a string constant o A string constant is a series of characters
surrounded by double quotes. How to declare a variable to store string
values?Represent a string using a one-dimensional
array of type charchar string[size];
Question: The size of a character array is fixed, how can this variable take string constants with different lengths as values?
3
Outline
String: Representation of a string: \0 Using scanf to read in string Initilization of strings
String-Handling Functions in the Standard Library
Passing Arguments to main() using an array of strings
4
The End-of-String Sentinel \0
A string is a one-dimensional array of type char.
char w[100]; character value \0 is used to terminate a string
strings have a variable length delimited by the null character \0 but with a maximum length determined by the size of the character array
The size of the string must include the storage needed for the null character \0.
5
The End-of-String Sentinel \0
Example:
#include <stdio.h>int main(void){ char w[100]; w[0]='A'; w[1]='B'; w[2]='C'; w[3]='\0'; printf("%s\n", w);}
% a.outABC
#include <stdio.h>int main(void){ char w[100]; w[0]='A'; w[1]='B'; w[2]='C'; w[3]='\0'; w[4]=‘D'; printf("%s\n", w);}% a.out
ABC
the null character value \0 is used to terminate a string
6
The End-of-String Sentinel \0
Example:
#include <stdio.h>int main(void){ char w[3]; w[0]='A'; w[1]='B'; w[2]='C'; w[3]='\0'; printf("%s\n", w);}
overrun the bounds of w
The size of the string must include the storage needed for the null character \0.
7
Outline
String: Representation of a string: \0 Using scanf to read in string Initilization of strings
String-Handling Functions in the Standard Library
Passing Arguments to main() using an array of strings
8
Using scanf to reading string
Using scanf to read in a string scanf(“%s”, w);
read in non-white space characters o positions the input stream to an initial non-
white space charactero read in non-white space characterso The process stops when a white space
character or EOF is encountered.
a null character is placed in memory to end the string.
9
Using scanf to reading string
#include <stdio.h>int main(void){ char w[10]; printf("Enter strings\n", w); scanf("%s", w); printf("%s\n", w);}% a.outEnter stringsHelloHello
% a.outEnter stringsHello WorldHello
scanf(”%s”,w);
read in non-white space characters
positions the input stream to an initial non-white space characterread in non-white space charactersThe process stops when a white space character or EOF is encountered.
a null character is placed in memory to end the string.
10
Outline
String: Representation of a string: \0 Using scanf to reading string Initilization of strings
String-Handling Functions in the Standard Library
Passing Arguments to main() using an array of strings
11
Initialization of Strings
Initialization of Strings Example: initialize a string variable as “abc”
char s[] = {‘a’, ‘b’, ‘c’, ‘\0’};char s[]=“abc”;
#include <stdio.h>int main(void){ char w[]="abc"; printf("%d\n", sizeof(w));}
% a.out4
The size of the string must include the storage needed for the null character \0.
12
Initialization of Strings
A pointer to char can also be initialized with a constant string.
A string constant is stored in memory by the compiler.
the pointer is assigned the address of the constant string in memory.
Example: char p* = “abc”;#include <stdio.h>int main(void){ char *p="abc"; printf("%s\n",p);}
% a.outabc
13
Initialization of Strings
Difference between initializing an array with a constant string and initializing a pointer with a constant string
#include <stdio.h>int main(void){ char s[]="abcdefg"; char *p="abcdefg"; printf("%s\n",s); printf("%s\n",p); printf("%d\n",sizeof(p)); printf("%d\n",sizeof(s));}
4 bytes is used to represent a memory address
% a.outabcdefgabcdefg48
14
Initialization of Strings
Difference between initializing an array with a constant string
the array contains the individual characters followed by the null character
initializing a pointer with a constant stringA string constant is stored in memory by
the compiler.the pointer is assigned the address of the
constant string in memory.
15
Examples: Process a string using array notation with subscripts
#include <stdio.h>int main(void){ char c, name[100]; int i; printf("Enter a Message:\n"); for (i=0; (c=getchar())!='\n'; ++i) name[i]=c; name[i]='\0';
for (i=0; name[i]!='\0'; ++i) { if(isupper(name[i])) name[i]=tolower(name[i]); else if(islower(name[i])) name[i]=toupper(name[i]); } printf("\n%s\n", name);}
% a.outEnter a Message:Have a Good Day!
hAVE A gOOD dAY!
16
Examples: Process a string using pointer
#include <stdio.h>int main(void){ char c, name[100], *p; int i; printf("Enter a Message:\n"); for (i=0; (c=getchar())!='\n'; ++i) name[i]=c; name[i]='\0';
for (p=name; *p!='\0'; ++p) { if(isupper(*p)) *p=tolower(*p); else if(islower(*p)) *p=toupper(*p); } printf("\n%s\n", name);}
% a.outEnter a Message:Have a Good Day!
hAVE A gOOD dAY!
17
Examples: Process a string using pointer
#include <stdio.h>int main(void){ char s[] = "Hello World"; printf("%s\n", s); printf("%s\n", s+1); printf("%s\n", s+2);}
% a.outHello Worldello Worldllo World
18
Outline
String:String-Handling Functions in the
Standard LibraryPassing Arguments to main() using an
array of strings
19
String-Handling Functions in the Standard Library
String-handling functions: Function prototypes are provided by string.h
#include <string.h> Functions:
Concatenate two strings: strcat (s1, s2);Compare two strings: int strcmp (s1, s2);Copy s2 to s1: strcpy (s1, s2);Length of a string: strlen (s);
20
String-Handling Functions in the Standard Library
char &strcat (char *s1, const char *s2);Concatenates s1 and s2, the result is put
in s1. The string s1 is returned.#include <stdio.h>#include <string.h>int main(void){ char s1[100] = "Good Day"; char s2[100] = "Hello World"; strcat(s1, s2); printf("s2=%s, s1= %s\n", s2, s1); strcat(s1, s2+6); printf("s2=%s, s1= %s\n", s2, s1);} % a.out
s2=Hello World, s1= Good DayHello Worlds2=Hello World, s1= Good DayHello WorldWorld
21
String-Handling Functions in the Standard Library int strcmp (const char &s1, const char *s2);
An integer is returned that is less than, equal to, or greater tan zero, depending on whether s1 is lexicographically less than, equal to, or greater than s2
#include <stdio.h>#include <string.h>int main(void){ char s1[100] = "Good Day"; char s2[100] = "Hello World"; printf("%d\n", strcmp(s1, s2)); printf("%d\n", strcmp(s1, s1)); printf("%d\n", strcmp(s2, s1));}
% a.out-101
22
String-Handling Functions in the Standard Library char *strcpy (char *s1, const char *s2);
s2 is copied into s1 until \0 is moved. Whatever exists in s1 is overwritten.
It is assumed that s1 has enough space to hold the result. The value s1 is returned.
#include <stdio.h>#include <string.h>int main(void){ char s1[100] = "Good Day"; char s2[100] = "Hello World"; strcpy(s1, s2); printf("s2=%s, s1= %s\n", s2, s1); strcpy(s1+1, s2); printf("s2=%s, s1= %s\n", s2, s1); strcpy(s1+1, s2+6); printf("s2=%s, s1= %s\n", s2, s1);}
% a.outs2=Hello World, s1= Hello Worlds2=Hello World, s1= HHello Worlds2=Hello World, s1= HWorld
23
String-Handling Functions in the Standard Library
unsigned strlen (const char *s);A count of the number of characters
before \0 is returned.
#include <stdio.h>#include <string.h>int main(void){ char s1[100] = "Good Day"; printf("%d\n", strlen(s1));} % a.out
8
24
Outline
String:String-Handling Functions in the
Standard LibraryPassing Arguments to main() using an
array of strings
25
Passing Arguments to main()
How main() communicates with the operating system? int main(void) int main( int argc, char *argv[])
argc: the number of the command line arguments
argv: an array of strings
26
Passing Arguments to main()
#include <stdio.h>int main(int argc, char *argv[]){ int i; printf("%d \n", argc); for (i=0; i < argc; ++ i) printf("%s\n", argv[i]);}
%a.out Hello World3a.outHelloWorld
27
Summary
String: Representing a string using an array of characters \0 is used to terminated a string
strings have a variable length delimited by the null character \0 but with a maximum length determined by the size of the character array
initialization of strings
String-Handling Functions in the Standard Library
Passing Arguments to main() argc: number of arguments argv: an array of strings