1 introduction to computing: lecture 16 character strings dr. bekir karlik yasar university...

45
1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering [email protected]

Upload: darcy-manning

Post on 16-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

1

Introduction to Computing: Lecture 16

Character Strings

Dr. Bekir KARLIKYasar University

Department of Computer [email protected]

Page 2: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

2

Topics

• Strings– Representation – Declaration – Functions – Common mistakes– Index of a char in a string

Page 3: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

3

On the Nature of Strings• Recall: Main memory

– contiguous array of cells– each cell has an address

0x1FFF 0x2000 0x2001 0x20020x1FFEetc.

Page 4: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

4ch

On the Nature of Strings (cont.)• Recall: Variable declaration

– sets aside a “box” to contain a value

Example: char ch;

ch = ‘B’;

0x1FFF 0x2000 0x2001 0x20020x1FFEetc.

‘B’

Page 5: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

5

On the Nature of Strings (cont.)

Example: char name[5];

Specifies numberof cells in the array

• String declaration– sets aside an array of cells– each cell contains a char– address of first cell in the array

Page 6: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

6

On the Nature of Strings (cont.)• String declaration– sets aside an array of cells– each cell contains a char– address of first cell in the array

Example: char name[5];

0x2000 0x2004

name

is 0x2000

Page 7: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

7

Character StringsDeclaration 1:

char name[5];

Declaration 2:

#define MAXLENGTH 5

char name[MAXLENGTH];

0x2000 0x2004

name

is 0x2000

Page 8: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

8

String Input/Output

#include <stdio.h>

#define MAXLENGTH 15

int main(){ char string1[MAXLENGTH]; char string2[MAXLENGTH];

scanf("%s %s", string1, string2); printf("%s %s\n", string1, string2);

return 0;}

No ampersand (&)!

Page 9: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

9

Character Strings

Initialization:

char name[5] = “Ali”;

A l i \0

Terminating Character:• Marks the end of string• Special char: ’\0’ • aka NUL (single L)

0x2000 0x2004

name

is 0x2000

Page 10: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

10

Character Strings

Initialization:

char name[5] = “Ali”;

Can storeat most 4 letters,because of `\0’

A l i \0

0x2000 0x2004

name

is 0x2000

Page 11: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

11

Character Strings

Declaration 3:

char name[] = “Ali”;

Takes up an extra cell for ‘\0’

A l i \0

0x2000 0x2003

name

is 0x2000

Page 12: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

12

Character Strings

Declaration 4:

char *name = “Ali”;

Result is “undefined”if you try to modify this

string.

A l i \0

0x3000 0x3003

0x3000

name

Page 13: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

13

Character Strings

Declaration 5:

char name[];

String with arbitrary length?

No! Will cause an error.

Page 14: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

14

A Char in a String

• The size of a character string is fixed.

• Character at position index: –string[index]– first character has index 0

Page 15: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

15

char name[8] = “Aise”;int i = 2;

printf(“Char at index %d is %c.\n”, i, name[i]);

A Char in a String

output: Char at index 2 is h.

index 0 index 4

A i s e \0

0x3995 0x399C

name

is 0x3995

Page 16: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

16

A Char in a String

index 2

A i s e \0

0x3995 0x399C

name

is 0x3995

char name[8] = “Aise”;

name[2] = ‘X’;printf(“Name: %s\n”, name);

Page 17: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

17

A i X e \0

0x3995 0x399C

name

is 0x3995

output: Name: AiXe

index 2

char name[8] = “Aise”;

name[2] = ‘X’;printf(“Name: %s\n”, name);

A Char in a String

Page 18: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

18

String Operations

• #include <string.h> • Operations:

– Assignment: strcpy()– Concatenation: strcat()– Comparison: strcmp()– Length: strlen()

Page 19: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

19

#include <stdio.h>#include <string.h>

#define MAXLENGTH 100

int main(){ char string1[MAXLENGTH]; char string2[MAXLENGTH];

strcpy(string1, “Hello World!”); strcpy(string2, string1);

return 0;}

String Operation: Assignment

string1: <garbage>string2: <garbage>

Page 20: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

20

String Operation: Assignment#include <stdio.h>#include <string.h>

#define MAXLENGTH 100

int main(){ char string1[MAXLENGTH]; char string2[MAXLENGTH];

strcpy(string1, “Hello World!”); strcpy(string2, string1);

return 0;}string1: “Hello World!”string2: <garbage>

Page 21: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

21

String Operation: Assignment#include <stdio.h>#include <string.h>

#define MAXLENGTH 100

int main(){ char string1[MAXLENGTH]; char string2[MAXLENGTH];

strcpy(string1, “Hello World!”); strcpy(string2, string1);

return 0;}

string1: “Hello World!”string2: “Hello World!”

Page 22: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

22

char name1[5] = “Ali”;char name2[5] = “Sami”;

name2 = name1;

Common Mistake:

Wrong Assignment

Example 1:

Error: “LValue required....”

Page 23: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

23

char *name1 = “Ali”;char *name2 = “Sami”;

name2 = name1;

Common Mistake:

Bad Assignment

Example 2:

Better avoid initialising

strings this way.(Usually, no error message.)

Page 24: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

24

Common Mistake:

Bad Assignment

S a m i \0

0x3990 0x3994

A l i \0

0x2000 0x2003

0x2000

name1

0x3990

name2

char *name1 = “Ali”;char *name2 = “Sami”;

Page 25: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

25

Common Mistake:

Bad Assignment

S a m i \0

0x3990 0x3994

A l i \0

0x2000 0x2003

0x2000

name1

0x2000

name2

name2 = name1;

Page 26: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

26

Common Mistake:

Not enough space

A l i \0

0x2000 0x2003

char name[] = “Ali”;

strcpy(name, “Samir”);

name

is 0x2000

Page 27: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

27

Common Mistake:

Not enough space

S a m i r \0

0x2000 0x2003

char name[] = “Ali”;

strcpy(name, “Samir”);

Requires caution.

name

is 0x2000

Page 28: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

28

String Operation: Concatenation

char string1[MAXLENGTH];char string2[MAXLENGTH];

strcpy(string1, “Goodbye”);strcpy(string2, “, Cruel ”);

strcat(string1, string2);strcat(string1, string2);strcat(string1, “World!”);

string1: “Goodbye”string2: “, Cruel “

Page 29: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

29

char string1[MAXLENGTH];char string2[MAXLENGTH];

strcpy(string1, “Goodbye”);strcpy(string2, “, Cruel ”);

strcat(string1, string2);strcat(string1, string2);strcat(string1, “World!”);

string1: “Goodbye, Cruel ”string2: “, Cruel “

String Operation: Concatenation

Page 30: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

30

string1: “Goodbye, Cruel , Cruel ”string2: “, Cruel “

String Operation: Concatenation

char string1[MAXLENGTH];char string2[MAXLENGTH];

strcpy(string1, “Goodbye”);strcpy(string2, “, Cruel ”);

strcat(string1, string2);strcat(string1, string2);strcat(string1, “World!”);

Page 31: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

31

string1: “Goodbye, Cruel , Cruel World!”string2: “, Cruel “

String Operation: Concatenation

char string1[MAXLENGTH];char string2[MAXLENGTH];

strcpy(string1, “Goodbye”);strcpy(string2, “, Cruel ”);

strcat(string1, string2);strcat(string1, string2);strcat(string1, “World!”);

Page 32: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

32

Common Mistake:

char name[5];

strcpy(name, “Ali”);strcat(name, “ Osman”);

Not enough space

A l i \0

0x2000 0x2004

name

is 0x2000

Page 33: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

33

Common Mistake:

char name[5];

strcpy(name, “Ali”);strcat(name, “ Osman”);

Not enough space

A l i O s m a

0x2000 0x2004

n \0name

is 0x2000

Page 34: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

34

strcpy(string1, “Apple”);strcpy(string2, “Wax”);

if (strcmp(string1, string2) < 0){ printf(“%s %s\n”, string1, string2);}else{ printf(“%s %s\n”, string2, string1);}

output: Apple Wax

String Operation: Comparison

Page 35: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

35

strcpy(string1, “Apple”);strcpy(string2, “Wax”);

if (strcmp(string1, string2) < 0){ printf(“%s %s\n”, string1, string2);}else{ printf(“%s %s\n”, string2, string1);}

String Operation: Comparison

Returns:

negative if string1 < string2

zero if string1 == string2

positive if string1 > string2

Page 36: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

36

strcpy(string1, “Apple”);strcpy(string2, “Wax”);

if (string1 < string2){ printf(“%s %s\n”, string1, string2);}else{ printf(“%s %s\n”, string2, string1);}

Common Mistake:

Wrong Comparison

Page 37: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

37

output: 5

Number of char’sbefore the `\0’.

char string1[100];

strcpy(string1, “Apple”);

printf(“%d\n”, strlen(string1));

String Operation: Length

Page 38: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

38

Common Mistake:

char name[5];

strcpy(name, “Bekir”);

Not enough space

Don’t forget the ‘\0’.

B e k i r \0

0x3990 0x3994

name

is 0x3990

Page 39: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

39

Character Strings as Parameters

• Strings as formal parameters are declared as char* or char[]– Examples:

void Greet ( char* name )

void Greet ( char name[] )

• As pointer to the first element of the string (array of chars).

• Changes to the string inside the function affect the actual string.

Page 40: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

40

Example: hello3.c

#include <stdio.h>#include <string.h>#define NAMELEN 50

/* Print a simple greeting to the user. */

void Greet ( char * name )

{

strcat(name,"! How are you?");

}

int main(){ char user[NAMELEN];

printf("Who are you? ");

scanf("%s", user);

Greet(user);

printf("%s\n", user);

return 0;}

user

Bekir\0

Page 41: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

41

int main(){ char user[NAMELEN];

printf("Who are you? ");

scanf("%s", user);

Greet(user);

printf("%s\n", user);

return 0;}

Example: hello3.c

#include <stdio.h>#include <string.h>#define NAMELEN 50

/* Print a simple greeting to the user. */

void Greet ( char * name )

{

strcat(name,"! How are you?");

}

name user

Bekir\0

Page 42: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

42

int main(){ char user[NAMELEN];

printf("Who are you? ");

scanf("%s", user);

Greet(user);

printf("%s\n", user);

return 0;}

Example: hello3.c

#include <stdio.h>#include <string.h>#define NAMELEN 50

/* Print a simple greeting to the user. */

void Greet ( char * name )

{

strcat(name,"! How are you?");

}

user

Bekir! How are you?\0

name

Page 43: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

43

int main(){ char user[NAMELEN];

printf("Who are you? ");

scanf("%s", user);

Greet(user);

printf("%s\n", user);

return 0;}

Example: hello3.c

#include <stdio.h>#include <string.h>#define NAMELEN 50

/* Print a simple greeting to the user. */

void Greet ( char * name )

{

strcat(name,"! How are you?");

}

user

Bekir! How are you?\0

Page 44: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

44

int main(){ char user[NAMELEN];

printf("Who are you? ");

scanf("%s", user);

Greet(user);

printf("%s\n", user);

return 0;}

More of scanf demystified

No ampersand (&) in scanf with strings!

Page 45: 1 Introduction to Computing: Lecture 16 Character Strings Dr. Bekir KARLIK Yasar University Department of Computer Engineering bekir.karlik@yasar.edu.tr

45

Summary

• A string is a contiguous array of chars• The string identifier is the address of the first char

in the string• Individual chars are accessed using the str[index] notation

• There are C library functions for copying, concatenating and comparing strings.