SM 514 Introduction to Software Testing
Transkript
SM 514 Introduction to Software Testing
Strings
Strings are multiple characters in a certain order
“my car”
“Please enter three integers”
C allows variable types for single characters, but not for strings
char type arrays are used to represent strings
Strings in C are terminated by the null character, „\0‟
So the string “my car”
Notice that space is counted as a character
Need to add the null character to the end of the string
Minimum length of array needed is 7 (including the null character)
What is the minimum length of an array to store “Please enter three integers” ?
28
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
127
Declaring and Initializing Strings
Strings are declared as arrays of characters
char FirstName[15];
char LastName[25];
Strings can also be defined as constants
#define ERR1
“Date is wrong”
#define ERR2
“Cannot Leave Name Field Blank”
Strings can be initialized when they are declared
char
char
char
char
Dr. Sadık Eşmelioğlu
FirstName[15] = {S, a, d, i, k};
FirstName[15] = “Sadik”;
LastName[25] = {E, s, m, e, l, i, o, g, l, u};
LastName[25] = “Esmelioglu”;
CENG 114 – Spring 2009-10
128
64
Strings in Memory
Problem
char x[15] = “John Smith”
x[0]
x[1]
x[2]
x[3]
x[4]
x[5]
x[6]
x[7]
x[8]
x[9]
x[10]
x[11]
x[12]
x[13]
x[14]
w
y
z
7
0
0
0
J
7
0
0
1
o
7
0
0
2
h
7
0
0
3
n
7
0
0
4
7
0
0
5
S
7
0
0
6
m
7
0
0
7
i
7
0
0
8
t
7
0
0
9
h
7
0
1
0
\0
7
0
1
1
?
7
0
1
2
?
7
0
1
3
?
7
0
1
4
?
7
0
1
5
15
7
0
1
6
-1
7
0
1
7
23
char x[15] = “John Adam Smith”
x[0]
x[1]
x[2]
x[3]
x[4]
x[5]
x[6]
x[7]
x[8]
x[9]
x[10]
x[11]
x[12]
x[13]
x[14]
w
y
z
7
0
0
0
J
7
0
0
1
o
7
0
0
2
h
7
0
0
3
n
7
0
0
4
7
0
0
5
A
7
0
0
6
d
7
0
0
7
a
7
0
0
8
m
7
0
0
9
7
0
1
0
S
7
0
1
1
m
7
0
1
2
i
7
0
1
3
t
7
0
1
4
h
7
0
1
5
\0
7
0
1
6
-1
7
0
1
7
23
Length of the string should be one less than the array size
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
129
Arrays of Strings
Strings are arrays of characters single dimensional arrays
Lists are arrays of strings two dimensional arrays
Players
Ahmet
Hasan
Naciye
Ayse
Nuri
This list can be represented as a two dimensional array (5 rows, ? columns)
char Players[5][7] = {“Ahmet”, “Hasan”, “Naciye”, “Ayse”, “Nuri”}
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
130
65
Storing in Memory
Player[0]
&Player[0][0]
Player
Player[0]
Player[1]
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
A
h
m
e
t
\0
H
a
s
a
n
\0
Player[2]
Player[3]
Dr. Sadık Eşmelioğlu
All have a
value of
7000
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
N
a
c
i
y
e
\0
A
y
s
e
\0
CENG 114 – Spring 2009-10
Player[4]
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
N
u
r
i
\0
131
Printing Strings
Use printf and scanf
%s is the placeholder for strings
example
printf(“%s”, “This is a book”);
prints
>This is a boo k
printf(“%s*%s”, “123456”, “123”);
prints
>123456*123
printf(“%8s*%5s”, “12345”, “123”);
prints
>
12345* 12 3
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
132
66
Printing Strings
Normally strings are right justified, but a minus sign after the % sign makes the
string left justified
printf(“%s*%s”, “123456”, “123”);
prints
> 1 23 45 6* 12 3
printf(“%5s\n%5s\n%5s\n”, “Ana”, “Baba”, “Cocuk”);
prints
> A na
> Ba ba
> C oc uk
printf(“%-5s\n%-5s\n%-5s\n”, “Ana”, “Baba”, “Cocuk”);
prints
> A na
> B ab a
> C oc uk
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
133
Printing Arrays of Strings
#include <stdio.h>
int main(void)
{
int i;
char Players[5][7] = {"Ahmet", "Hasan", "Naciye", "Ayse", "Nuri"};
printf ( "%s\n", Players);
printf ( "%s\n", Players[0]);
printf ( "%c\n", Players[0][0]);
for(i=0;i<=4;i++) printf("%s\n", Players[i]);
return(0);
}
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
134
67
Reading Strings
Reading strings with scanf works the same way as
reading numbers:
scanning for numbers begin with a numeric character
(or decimal point) and ends when a non-numeric
character is encountered.
scanning for strings starts after the first white space
character and ends when a white space character is
reached (white space characters are spaces, tabs,
newlines, …)
a null character (\0) is placed after the last character is
read.
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
Reading Strings
char x[8];
scanf(“%s”, x);
user enters
>John
>
or user enters
>
>
135
or user enters
John
>
>
> John
>
The entry is stored in memory as shown:
x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7]
J
Dr. Sadık Eşmelioğlu
o
h
n
\0
CENG 114 – Spring 2009-10
136
68
Reading Strings
char
int
char
int
c [5];
n;
d [5];
t;
scanf(“%s %d %s %d”, c, &n, d, &t);
user enters
>CENG
>
114
Thu
240
or user enters
>CENG
>
114
>
240
>
Thu
The entries are stored in memory as shown:
Dr. Sadık Eşmelioğlu
Var
Addr
Val
Binary
c[0]
7000
C
01000011
c[1]
7001
E
01000101
c[2]
7002
N
01001110
c[3]
7003
G
01000111
c[4]
7004
\0
00000000
n
7005
114
01110010
d[0]
7006
T
01010100
d[1]
7007
h
01101000
d[2]
7008
u
01110101
d[3]
7009
\0
00000000
d[4]
7010
???
?Unknown?
t
7011
240
11110000
CENG 114 – Spring 2009-10
137
Example
#include <stdio.h>
#define NUM_STD100
#define NM_LEN15
/* Maximum number of students */
/* Maximum lenght of each name */
int main(void)
{
char name[NUM_STD][NM_LEN];
int
Grade[NUM_STD];/
int
i = 0;
int
num_std = 0;
char ans = 'y';
char junk;
Dr. Sadık Eşmelioğlu
/* Array of student names */
/* Array of student grades */
/* Loop index */
/* Actual num of students read */
/* if equals 'y' continue reading */
/* reading newlines */
CENG 114 – Spring 2009-10
138
69
Example
while(ans == 'y') {
printf("Please enter Last Name and Grade: ");
scanf("%s %d", name[i], &Grade[i]);
i++;
printf("\nAre there more students? [y/n]: ");
scanf("%c%c%c", &junk, &ans, &junk);
}
num_std = i;
for(i = 0; i < num_std; i++)
printf("\n%-20s\t%4d\n", name[i], Grade[i]);
return(0);
}
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
139
String Library Functions
#include <string.h>
strlen return the length of string not counting \0
strcopy copies string from source to dest
strncopy copies n chars from source to dest
strcat appends string from source to end of dest
strncat appends n chars from source to end of dest
strcmp compares two strings alphabetically
strncmp compares the first n chars of two strings
strtok breaks string into tokens using delimiters
Dr. Sadık Eşmelioğlu
CENG 114 – Spring 2009-10
140
70
Benzer belgeler
Yenilenebilir Enerji
Proje / Projects
İmalat / Manufacturing
İnşaat / Construction
Enerji / Energy
Montaj / installation
Academic Honesty Pledge