400 likes | 581 Views
Review of Chapter 10: String and Pointers. Outline. String: Representation of a string: 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. String. A string is
E N D
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
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.
The End-of-String Sentinel \0 the null character value \0 is used to terminate a string • Example: #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); } #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.out ABC % a.out ABC
Using scanf to reading string • Using scanf to read in a string • scanf(“%s”, w); • read in non-white space characters • positions the input stream to an initial non-white space character • read in non-white space characters • The process stops when a white space character or EOF is encountered. • a null character is placed in memory to end the string.
Using scanf to reading string scanf(”%s”,w); • read in non-white space characters • positions the input stream to an initial non-white space character • read in non-white space characters • The process stops when a white space character or EOF is encountered. • a null character is placed in memory to end the string. #include <stdio.h> int main(void){ char w[10]; printf("Enter strings\n", w); scanf("%s", w); printf("%s\n", w); } % a.out Enter strings Hello Hello % a.out Enter strings Hello World Hello
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.out 4 The size of the string must include the storage needed for the null character \0.
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.out abc
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 string • A string constant is stored in memory by the compiler. • the pointer is assigned the address of the constant string in memory.
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);
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
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?
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
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 World 3 a.out Hello World • argc: the number of the command line arguments • argv: an array of strings
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
Introduction • Programming Questions: • How to represent a date? • Three components are required: • day, month, year • Three variables can be used to represent a date. • int day, month, year; /* date */
Introduction • Programming Questions: • How to represent a student record? • components: • last_name, first_name; • UIN • scores of six assignments; • scores of three midterms and final; • Six variables are required to represent a student record. • char[20] last_name; • char[20] first_name; • int UIN; • int assignment[6], midterm[3], final;
Introduction • represent a date. • int day, month, year; represent a student record. • char[20] last_name; • char[20] first_name; • int UIN; • int assignment[6], midterm[3], final; Can we represent a collection of components of possibly different types by a single variable? • A derived date type — structure • Structure is a means of aggregating • a collection of data items • of possibly different types. • components are individually named. These components are called members.
Chapter 12: Structures and ADTs • Outline • Declaring Structures • Accessing a Member in a structure variable • Initialization of Structures
members of the structure Declaring Structures • How to declare a structure data type? • Example: a structure type to represent a date: Components: day, month, year struct date_str{ int day; int month; int year; }; • This declaration creates the derived date type struct date_str. structure tag name
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;
#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;
#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); } }
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 declaration • Storage is allocated when variables are declared of a structure type.
Chapter 12: Structures and ADTs • Outline • Declaring Structures • Accessing a Member in a structure variable • Initialization of Structures
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;
#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); }
#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); } }
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
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
date.c #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); } #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); } main.c date.h gcc date.c main.c
Notes • The member name must be unique within the specified structure struct name_str{ char[15] last_name; char[15] first_name; }; struct name_str{ char[15] name; char[15] name; }; X
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
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
Chapter 12: Structures and ADTs • Outline • Declaring Structures • Accessing a Member in a structure variable • Initialization of Structures
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};
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};
Chapter 12: Structures and ADTs • Summary • Declaring Structures • Accessing a Member in a structure variable • member operator “.”: • structure_variable.member_name • structure pointer operator “ -> ” : • pointer_to_structure -> member_name • Initialization of Structures • A structure variable can be followed by • an equal sign = and • a list of constants contained within braces • If there are not enough values, the remaining members are assigned the value zero. Read Chapter 12.1 – 12. 6