Download - Review of Chapter 10: String and Pointers
1
Review of Chapter 10:String and Pointers
2
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
3
String
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.
4
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
5
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.
6
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.
7
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.
8
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
9
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.
10
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);
11
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
12
Passing Arguments to main()
Unix Commands, take arguments %pico q1.c %gcc q12.c prime.c %gcc –lm q12.c prime.c
In our project, write code, compile, execute a.out %a.out Can we pass arguments to our program? Can we pass arguments to the main()
function?
13
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
14
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
argc: the number of the command line argumentsargv: an array of strings
15
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
16
End of Chapter 10: String and PointersRead 10.1 – 10.10
17
Chapter 12 Structures and ADTs
18
Introduction
Programming Questions: How to represent a date?
Three components are required:o day, month, year
Three variables can be used to represent a date.
o int day, month, year; /* date */
19
Introduction
Programming Questions: How to represent a student record?
components: o last_name, first_name;o UINo scores of six assignments;o scores of three midterms and final;
Six variables are required to represent a student record.
o char[20] last_name;o char[20] first_name;o int UIN;o int assignment[6], midterm[3], final;
20
Introductionrepresent a student record. char[20] last_name; char[20] first_name; int UIN; int assignment[6], midterm[3],
final;
represent a date.int day, month, year;
Can we represent a collection of components of possibly different types by a single variable?
A derived date type — structureStructure is a means of aggregating
a collection of data items of possibly different types.
components are individually named.These components are called
members.
21
Chapter 12: Structures and ADTs
Outline Declaring Structures Accessing a Member in a structure variable Initialization of Structures
22
Declaring Structures
How to declare a structure data type? Example: a structure type to represent a
date: Components: day, month, yearstruct date_str{
int day;int month;int year;
};
This declaration creates the derived date type struct date_str.
members of the structure
structure tag name
23
Declaring Structures
How to declare variables of a structure type? Declare variables in declaration of a structure type
struct date_str{int day;int month;int year;
} date1, date2; Declare variables “struct str_name variable_list;”
struct date_str{int day;int month;int year;
}; struct date_str date3, date4;
24
#include <stdio.h>
int main(void){ struct date_str{ int day; int month; int year; } date1, date2;
printf("Input data in format DD/MM/YYYY:"); scanf("%d/%d/%d", &date1.day, &date1.month, &date1.year);
printf("Input data in format DD/MM/YYYY:"); scanf("%d/%d/%d", &date2.day, &date2.month, &date2.year);}
struct date_str{ int day; int month; int year; }; struct date_str date1; struct date_str date2;
25
#include <stdio.h>int main(void){ struct student_str{ char last_name[15]; char first_name[15]; int UIN; int assign[6]; int midterm[3]; int final; } students[110];
int i; printf("Input last name, first name and UIN for each students:\n"); for (i=0; i< 110; i++){ scanf("%s", students[i].last_name); scanf("%s", students[i].first_name); scanf("%d", &students[i].UIN); }}
26
Declaring Structures
Summary: Declare a structure type Declare variables of a structure type The declaration of a structure type creates a
derived date type.No storage is allocated upon this
declarationStorage is allocated when variables are
declared of a structure type.
27
Chapter 12: Structures and ADTs
Outline Declaring Structures Accessing a Member in a structure variable Initialization of Structures
28
Access a member
How to access a member? member operator “.”
structure_variable.member_name Example:
struct date_str{int day;int month;int year;
} date1, date2;date1.year = 2000; data2.year= 2005;date1.day = date2.day = 10;date1.month = date2.month = 11;
29
#include <stdio.h>
int main(void){ struct date_str{ int day; int month; int year; } date1, date2;
printf("Input data in format DD/MM/YYYY:"); scanf("%d/%d/%d", &date1.day, &date1.month, &date1.year);
printf("Input data in format DD/MM/YYYY:"); scanf("%d/%d/%d", &date2.day, &date2.month, &date2.year);}
30
#include <stdio.h>int main(void){ struct student_str{ char last_name[15]; char first_name[15]; int UIN; int assign[6]; int midterm[3]; int final; } students[110];
int i; printf("Input last name, first name and UIN for each students:\n"); for (i=0; i< 110; i++){ scanf("%s", students[i].last_name); scanf("%s", students[i].first_name); scanf("%d", &students[i].UIN); }}
31
Accessing a Member
Question: Given the following declaration:
struct date_str{ int day; int month; int year; } date1;struct date_str *pDate = &date1;
How to access the members of the variable to which pDate points?
(*pDate).day
32
Accessing a Member
How to access a member? structure pointer operator ->
access the members of a structure via a pointer.
pointer_to_structure -> member_name (*pointer_to_structure).member_name
Example: struct date_str *pDate = &date1;
(*pDate).day pDate->day
33
#include <stdio.h>struct date_str{ int day; int month; int year;};void getDate(struct date_str *pDate);void printDate(struct date_str *pDate);
#include "date.h"int main(void){ struct date_str date1, date2; getDate(&date1); getDate(&date2); printDate(&date1); printDate(&date2);}
date.h
#include "date.h“
void getDate(struct date_str *pDate){ printf("Input a date in DD/MM/YYYY:"); scanf("%d/%d/%d", &(pDate->day), &(pDate->month), &(pDate->year));}void printDate(struct date_str *pDate){ printf("The input date is: %d/%d/%d\n", pDate->day, pDate->month, pDate->year);}
date.c gcc date.c main.c
main.c
34
Notes The member name must be unique within
the specified structurestruct name_str{
char[15] last_name;char[15] first_name;
};struct name_str{
char[15] name;char[15] name;
}; X
35
Notes Can we have two members having the same
name in different structures?Since the member must always be
accessed through a unique structure variable identifier, there is no confusion
36
Accessing a Member
Summary member operator “.”
structure_variable.member_name structure pointer operator “ -> ”
access the members of a structure via a pointer.
pointer_to_structure -> member_name (*pointer_to_structure).member_name
37
Chapter 12: Structures and ADTs
Outline Declaring Structures Accessing a Member in a structure variable Initialization of Structures
38
Initialization of Structures
Initialization A structure variable can be followed by
an equal sign = and a list of constants contained within braces
Example:struct date_str{ int day; int month; int year;};struct date_str date={12, 12, 2000};
39
Initialization of Structures
Initialization If there are not enough values, the remaining
members are assigned the value zero. Example:
struct student_str{ char last_name[15]; char first_name[15]; int UIN; int assign[6]; int midterm[3]; int final; }
strcut student_str s1={“Bush”, “Jenny”, 80002211};
40
Chapter 12: Structures and ADTs
Summary Declaring Structures Accessing a Member in a structure variable
member operator “.”:o structure_variable.member_name
structure pointer operator “ -> ” :o pointer_to_structure -> member_name
Initialization of StructuresA structure variable can be followed by
o an equal sign = and o a list of constants contained within braceso If there are not enough values, the remaining
members are assigned the value zero.
Read Chapter 12.1 – 12. 6