ࡱ> '` 7bjbj /SZZZZZZZ4v:v:v:h:;>dhB<B<L<<<<<<cccccccehhcZ<<<<<cZZ<<cEEE<ZZ<Z<cE<cEEZZZ\<6< t _v:=P[cd0>d[h8Crh,\\hZAa<<E<<<<<ccDX<<<>d<<<<$((ZZZZZZ ENGN 38 Introduction to Computing for Engineers Chapter 9: String Variables There are two data types whose values represent strings of characters: C-strings an array of chars whose last element is '\0', the null character inherited from C. Strings a class type defined in the standard library. Youll need: #include Syntax for declaring a C-string variable char cStr [10]; /* This automatically creates a C-string with the name cStr. It is an array of `10 characters whose last element is the null character. Beware: cStr can only hold 9 chars! */ Syntax for initializing a C-string variable char myMessage[20] = Hi There.; //Note: If we omit 20 the array would be size 10. Note: char myMessage[20] = { 'H', 'i', ' ', 'T', 'h', 'e', 'r', 'e', '.'} is not a C-string! (Why not?) Using C-strings (Beware!) 1. Dont let a C-string lose the '\0'. If the array loses the \0 as the last element then you it is longer a C-string. It is merely an array of base type char. Bad things will happen if you try to use it as a C-string! (e.g. functions that take C-strings wont work!) It is a good idea to take safeguards like this: int index = 0; while ( (myMessage[index] != '\0' && (index < 20) ) { myMessage[index] = X; index++; } 2. You cant use an assignment statement with C-strings. This is illegal: cStr = hello; To do an assignment you must use the function strcpy: strcpy (cStr , hello); // strcpy is a function found in Some versions of C++ allow a 3rd argument that gives the max number of chars to copy: strcpy (cStr , hello, 9); // The 3rd argument should be SIZE -1 Funny thing: This is legal: char cStr [10] = hello ; // Because this is an initialization, not an assignment. 3. You cant use the comparison operator with C-strings. This is illegal: cStr = = hello; To do a comparison you must use the function strcmp: strcmp (cStr , hello); // This function is also found in //Beware, it has strange behavior. It returns 0 (false) if they are same. See next page for more details. Functions that use C-strings There are many predefined functions that can be used with C-strings. Some are in the library file Some are in the library file Some are member functions of the class iostream. So they can only be invoked with calling objects such as cin and cout. 1. Functions in that are used with C-strings function name arguments Postcondition / Return value ____ strcpy (targetC-string, C_string1) targetC-string is changed strcpy (targetC-string, C_string1, limit) targetC-string is changed strcat (targetC-string , C_string1) targetC-string is changed strcat (targetC-string, C_string1, limit) targetC-string is changed strlen (C-string1) returns int (\0 not counted in length) strcmp* (C-string1, C-string2) returns int (neg int, 0 or pos int) strcmp* (C-string1, C-string2, limit) returns int (neg int, 0 or pos int) *If first argument is < the second (using lexicographic order), a negative number is returned. If the second > first, a positive number is returned. If they are the same, 0 is returned. If this expression is used as a bool then if it returns false that means they are the same! Note - This is counterintuitive! 2. Functions in that are used with C-strings function with parameters Postcondition/Return value______________________ toupper (char) returns the int corresponding to the uppercase version of char tolower (char) returns the int corresponding to the lowercase version of char isupper (char) returns true if char is uppercase letter, otherwise, false islower (char) returns true if char is lowercase letter, otherwise, false isalpha (char) returns true provided char is a letter of the alphabet, otherwise, false isdigit (char) returns true if char is a digit, otherwise, false isalnum (char) returns true if char is a letter or a digit, otherwise, false isspace (char) returns true if char is whitespace, otherwise, false ispunct (char) returns true if char is a printing character other than whitespace, digit or letter, otherwise, false isprint (char) returns true if char is a printing char, otherwise, false isgraph (char) returns true if char is a printing char other than whitespace, otherwise, false isctrl (char) returns true if char is a control character, otherwise, false 3. Member Functions of iostream that are used with C-strings Function shown invoked with arguments Postcondition/Return value___ __ . cin.getline (cStr, intNo) cStr is filled with up to intNo of characters from the line in the input stream. cin.get (char&Ch) The argument receives the value of the next character from the input stream including '\n' and blanks, etc. cin.putback (charCh) Puts the value of charCh in the input stream. cin.peek() Returns next char in the input stream without reading it. cin.ignore (intNo, charCh) Ignores the next intNo of chars in the input stream or all the characters up to and including charCh, whichever comes first. cout.put (charCh) Outputs charCh to screen. Insertion << and extraction >> operators with C-strings The insertion and extractions operators of the iostream class work with C-strings: char cStr [100]; cout << Please give a value for C-string variable cStr; cin >> cStr; Beware: If user types in Do be do to you! cStr will only have the value of Do. Why? Because cin reads only up to the first whitespace. To get the entire line, you must use the member function getline (defined above): cin.getline(cStr, 80); Example: char cStr[100]; cout << Enter some input:\n; cin.getline(cStr, 80); What will the value of cStr be if the user types this: Do be do to you! Answer: Do be do to you! Example: char shortCstr [5]; cout << Enter some input:\n; cin.getline(shortCstr, 5); What will the value of shortCstr be if the user types this: Do be do to you! Answer: Do b Because the C-string can only hold 4 characters. The Standard Class string C++ provides a standard class called string. Objects of the class string are used to represent values that are strings of characters. They are intuitive and easy to use. The class is defined in the standard library so you will need: #include using namespace std; The string class allows the programmer to treat strings as a basic data type without needing to worry about the implementation details. Syntax for declaring a string object A string object is declared like any object of a class. string strObj; Syntax for initializing a string object Remember that constructors initialize objects when the objects are declared. The class string has a default constructor that initializes a string to the empty string. So in the declaration above myStringObject was initialized to the empty string. There is also a constructor that takes a C-string and initializes the string to the value of the C-string. string strObj (I am a C-string); After this declaration is executed the value of anotherStringObject is I am a C-string. (Even though it is not!) String Constructors: string strObj; // initializes value of strObj to the empty string: string strObj (C-string); // initializes the value of strObj to the value of the C-string argument // remember a literal like Wendy is a C-string. string strObj (string); // initializes the value of strObj to the value of the string argument Using strings Strings are a better way to store and manipulate string data. They are more intuitive than C-strings. However C-strings are still very common because they are leftover from the C language. With strings operators work as you would expect (unlike C-strings) = assignment operator + concatenation operator += compressed code Comparison operators use lexicographic order == != < > <= >= Unlike C-strings, you can use the assignment operator = with strings string str1(hi), str2 = goodbye, str3; str3 = adios; str2 = str3; Notes: The = is overloaded! Quoted strings are actually C-strings but there is automatic type conversion of C-strings to strings. So the above is OK. string string1(hi); has exactly the same result as string string1 = hi; Unlike C-strings, you can use the concatenation operator + with strings str 3 = str1 + + str2 + adios; Note that + is overloaded to take any order of values of C-strings and strings. (If this overloading were not there, and + was used with a C-string, the compiler would look for a constructor that can perform a type conversion to convert the C-string to a value for which + did apply.) The insertion << and extraction >> operator also work with strings objects: But but cin still cant read whitespace. So as with a C-string, to get a value into a string that has spaces, we need to use a function called getline. However, the function getline used with string objects is not the same as the function getline used with C-strings. cin.getline (cStr, intNo) vs. getline (cin, strObj) The first is a member function of the class iostream. It is found in the file . This function takes a C-string argument. The second is a regular function. It is found in the file . This function takes a string object argument. Example: string shortStr; cout << Enter some input:\n getline (cin, shortStr); What will the value of shortStr be if the user types this: Do be do to you! Answer: Do be do to you! / /* Just because we named it shortStr doesnt mean it is. Strings will be as long as they have to be. */ There is another version of the function getline: getline(cin, strObj, charCh) This will read the input stream up to the charCh and put that value into strObj. some member functions of the string class Member Function Arguments Postcondition/Return value______ strObj.c_str() none Converts the string to a C-string. e.g. ifstream inputData; string filename; cout << \nType in a file name. \n; cin >> fileName; inputData.open(fileName.c_str()) strObj.length() none Returns the length of the string strObj[i] Returns element i. You can access the characters in a string object in the same way that you access array elements. You still need to be careful not to use an illegal index value. strObj.at(i) int Returns element i and checks to see if it is out of range. If i evaluates to an illegal index the program will terminate and give an error message. e.g. string myString(Mary); cout << myString[6] << endl; // no error message cout << myString.at(6) << endl; // program terminates with err msg strObj.substr(pos, length) 2 ints Returns substring of calling object starting at position pos and with length characters. strObject.empty() none Returns true if calling object is empty string strObj.insert(pos, str2) int and string Inserts str2 into strObject at position pos strObj.remove(pos, length) 2 ints Removes substring of size length, starting at pos. strObj.find(str1) string Returns index of first occurrence of str1 in strObject strObj.find(str1, pos) string and int Returns index of first occurrence of str1 in strObject; the search starts at pos strObj.find_first_of(str1, pos) string and int Returns index of first instance in strObject of any char in str1, start search at pos strObj.find_first_not_of(str1, pos) string and int Returns index of first instance in strObject of any char not in str1, start at pos Automatic type conversions between string objects and C-strings C++ will perform an automatic type conversion of a C-string to a string object. But not of a string object to a C-string. char cStr[] = This is my C-string; string strObj (This is my string Object); So you can do this: strObj = cStr; But not this: cStr = strObj; Or this: strcpy(cStr, strObj); //the second argument also must be a C-string. So you need to do this: strcpy(cStr , strObj.c_str() ); But not this: cStr = strObj.c_str(); // Because you cant use the assignment op with C-strings!     Page  PAGE 3 of  NUMPAGES 7 Page  PAGE 7 of  NUMPAGES 7 LMN , 9 < = E F N O P \ g y z {  ڲyuj_W_hp 5B*phh|JshwzB*phh|Jsh.B*phh.h{4hwz5CJ$aJ$h{4hOg5CJ$aJ$hq`5CJ$aJ$hpeh`-5h`-h5h`-B*phh0\phwzB*phh`-h0\p hwz56h]hwzhwz56hwzhwz5CJ aJ h{4h=(5CJ(aJ(h{4h0]5CJ(aJ(0MNO P y = > j / 0 J r [ h^hgdko 0^`0gdpegdGgd.h^hgd`- & Fgdwzgdwz$a$gd0]77     " 1 2 7 9 < = > J V i j k ᴧ{oco\Qh|Jsh.B*ph h.h.h{4hOg5CJ$aJ$h{4h.5CJ$aJ$hq`5CJ$aJ$hpehpe5h`-h`-6B* phh`-hwz56B* phh`-hwz6B* phh`-hp 56B* phh0\phwz6B* phh`-B* phhGhGB* phhGhwzB* phhGB* phh|JshGB*ph     " # . / 0 1 ? G H I J N X Z k l n o 崯}x}skchhOg5hh5 h5 his5hOghOg5h{4hG5CJ$aJ$hI5CJ$aJ$h{4heQ5CJ$aJ$h5CJ$aJ$ h5hGh.h.6h.h|JshB* phh|Jsh.B* phh|JshKbB* phhKbh|Jsh.B*phh|JshB*ph&o p q r [ \ ]    9 : K O [ ] ^  ԾԹ򤠘wsod`hpeh|Jshp 5B*phhishIh|Jsh$&B*phh|JshpeB*phh|JshGB*phhp 5B*phhGhOghG5hOghOg5 h5 hpe5h|JshB*phh|JshB*phh|JshOgB*phhh$& hkohkohOg h=5hh5%[ \ : K ^ 0s0gdis`gd$& 0^`0gdpe ^`gdis^gd$&h^hgdko^gdpe 0159>MUWs&槣zmh`h`[` h=5hOghOg5 h5hIh$&6B* phh IB* phhIh$&B* phh|Jshp 5B*phh|Jsh$&B*phh$&hkhIhGB* H*phhp 5B*phh|JshpeB*phh|JshGB*phhishGhGH*hGhIhGB* phhIhB* phh"&'0567EFGgtxz|  -.KǼ{{{w{{w{{{h+,hb hbhbh+,hb5CJ,aJ,h{45CJ$aJ$hIhIB* phhIhB* phhIhB* phhIhGB* phhhIh IhB*phh IB*phh IhGB*phh Ih IB*phhGhOg-0G|-KXYf3y  ` gdEtlgd. & Fgdbgdb @gdI ^`gd^gdpep^pgdpe!2AIJY])79:ABKZeqљѝѝљѝѝљѝh$Mh Ih7 hp5>* her5>* h:5>*herh`Q5>*herh|p5>* h>S5>*h|phhb5CJ$aJ$hh+,5CJ$aJ$ hbhbhbhh:8 '13:=?HJSTU]bwxy  #@ABĸh?Hhh` CJ$aJ$hh5CJ$aJ$hhb5CJ$aJ$hh+,5CJ$aJ$h^f5CJ$aJ$hWLhh`Qh>Sh:hUh$Mh Ihh7h|p h.h|p8y  AB+,wx @ gd>S @ @ ^@ `gd>S @  ^` gd>S @ gd>Sgd`   ` gd  ` gd$MBCJYZ[u{"*+,34P %&-.O_`ahiopҺ²ªҺhlCJaJh CJaJh CJaJh>SCJaJhyCJaJh:CJaJ h` 5>* hp5>*herh` 5>* h 5>* h>S5>*C`almf& p  H^ `HgdI p pgdo p gdo @ @ ^@ `gdy @ gd>S @  ^` gd>S[lmtu{|} %&'<Ufglĸ}sherhb5>* hI5>* hb5>* hZc5>*hIhI5hIhZc5hIhb5h+,ho5>*CJaJhhb5CJ$aJ$hh+,5CJ$aJ$h|CJaJh^<CJaJh CJaJhyCJaJh:CJaJh>SCJaJ-%&1235<>@D]bc{#%'(>@UVbcu!-89:CDIKZ\ijž hW]LhW]Lhg^hW]L herhbhoh+,hIhy hbhoho5>* hI5>* ho5>*GVW:;hijgdo p pp^p`gdW]L p  H^ `HgdI p pp^p`gdo p pp^p`gdg^ p  H^ `HgdI p pp^p`gdoj;?JNPQZ[m}!13Ȼձձձխ⇃{⭃wha hhqqhu"hhu"5hX1h5B*\phhZhu"5hZho5h+,hqq5B*phhP{ha 5B*phhP{hu"5B*phhP{ho5B*phhohW]Lhw5CJ aJ hwhW]L5CJ aJ +BPQ[3KLMf$ gdX1 gdo   ^ `gdo gdgdo ^`gdu34@DJKLMUVƾ~wjb^QhP{ha 5B*phhZh3Tho5hX1hX15B*ph h5\h[hX1B*\phh[hX1\ h[h h[hX1hX1hX15\hX1hX15B*\ph hX15h3ThX15 h5 ho5hP{ho5B*phhP{hu"5B*phhP{h+,5B*phhuB*phTVX^_ / Ľ}nd[OC< hZchZch{4h:5CJ$aJ$h{4h^<5CJ$aJ$hb5CJ$aJ$hX1ho5\hX15B*CJ \aJ ph3fhX1hX15B*\ph h5\h[h=B*phh[hX1B*phh[hX1B*\phh[hX1\ h[h h[hX1hohX15B*phhP{ha 5B*phhP{ho5B*phhP{hX15B*ph$C^_ !%!'!! ^gdZc gdZc  ^` gdb ppp^p`gdo pgdX1 pgdX1  ^gdX1  gdo  ^gdo/ 5 %!!!!!!!!"""""""" "!".";"H"I"X"d""Ļ~qd~q~SĻL hPh/; hP{h$&5B*CJaJphhP{hFyK5B*phhP{hE5B*phhP{h$&5B*phhPh$&5 hPh$&h$&5CJ$aJ$h{4h$&5CJ$aJ$h{4hq`5CJ$aJ$hq`5CJ$aJ$h$&5CJaJ hZchsMhP{hZc5B*ph hPhZchZc hZchZchZchZc56\]!!!" "!"I""B#C###E$F$[$j$$$$;%<%T%%%^gda&`gda&gda&  ^` gdsMgd$& gdsM""##A#B#C########$$$)$B$C$E$F$[$e$h$i$j$$$$$$$$$򪞑}pfp}phWB* \phha&ha&B* \phha&5B*phhW5B*phhP{ha&5B*phha&ha&5CJ$aJ$ha&h5CJ$aJ$hJ@hFyKhf5B*phhFyKhJ@5B*phhFyKhFyK5B*phhFyKh$&5B*phhE hPh$& hPhsM"$$$;%<%F%J%S%T%p%s%v%w%%%%%%%%%%%%%&&&$&:&I&i&j&ĺİħ}xtmtf_[_[WhW]LhJ@ hPhW]L hPh= h^[h^[hO hO5 h^[5hPhW]L5hPh=5h{4hW]L5CJ$aJ$hW]L5CJ$aJ$hJ@5CJ$aJ$ha&5B*phhW5B*phhP{ha&5B*phhP{ha&B* phha&ha&B* \phhWB* \phha&hWB* \ph %%%&j&k&&&&&'1'2'w''''''\(( & FgdJ@ X^X`gdO  ^` gdsM`gdOgda& gdO gdOgdW]Lj&k&l&w&y&&&&&&&&&&&'''1'2'H'I'K'i'j'v'w'x''''''''''''ؽ{n{a{n{n{n{hFyKhFyK5B*phhFyKh.5B*phhFyKh/;5B*ph hPh/; hJ@5 hE5hPh/;5hPh/;56hPh$&56hPh$&5hPhW]L5hHyha&5 ha&ha&ha&hP{ha&5B*phh;ha&5h;h;5 h;5 ha&5&'''''''''((>(F(G(J(M(Y(Z([(\(c(q(r(u((((((((((((((((( )ƿ۲͡umemehPh/;5hPhsM5hPhsM56hPh$&56hPh$&5hfhsM5hfh5hfhfh.5B*phhfhsM5B*ph hPh. hPh/; hPh hPhsMhJ@ hPhW]LhFyKh/;5B*phhFyKh.5B*ph'((( )p)=*>****++++ ,/,X,[,},,, ^`gdS ^`gdgdgd/; gdsM  ^` gd: ^gdsM )*<*=*>*?*B*i*o*********+#+;+B+C+_+b+|++++++++++,,,,,,ѵѵѫѵǝѐǃxqmemh3ThF&5hF& hPhF&h^[hSB*phhhB* \phhh5B*phhh5B*\phhh6]ha&h5B*\phhohh5\ hhhPh/;5hPhW]L5 hS5 h;5 hPh/; hPhsM',,,, -#-%-s----/.N..... /D/gd\ ^`gdP^gdu ^`gdugdS gd ^`gdF&gdF& gdF&gdTo,,,,,--- -$-&-'-1-L-[-b-r-s-z-|-}--------.&.-.˽~tgc_[NhohTo5B*phh^[hToh=huhuB* \phhuB* \phhB* \phhP{5B*phh5B*ph h5\h[h\ h[h=h[h^[B*ph h[hu h[h h[h^[ h5 hS5hS5B*phhSh=5B*phhShF&5B*ph-./.?.B.H.J.N.a.v.|.~..................// ///////!/"/D/H/I/K/]/ǻي~qhP{h?H5B*phhKhDhvCh?Hhp;h=HO hR5>* hD5>*herhD5>*hRh=HO5CJ$aJ$h{4h=HO5CJ$aJ$h5CJ$aJ$hR5CJ$aJ$h\huhZhu5B*phhShTo5B*phhTo+]/^/f/o/q///////////000000000011114151F1T1j1s11111111111122222222222222*3+333hHyhp;hKhTohDhRh=HOh\hUhvCh?HB*phhP{h\5B*phhP{hU5B*phhP{h?H5B*phhP{hD5B*ph>D/_/p/////000222,333N44 P^`PgdR @ gdR @ P^`PgdR p@ P^`PgdR @ P^`Pgdp;gdTo ^`gdD ^`gdK333L4M4n4|44445?5C5Y5Z5[5\5{55555555555555 6 6666!6J6g6i6~666666ÿ~thP{5B*phhP{h'}5B*phhP{h+5B*phhp5B*phhP{hp5B*phh[hh^fh'}h+hHy5CJ$aJ$hp5CJ$aJ$h^f5CJ$aJ$hQo5CJ$aJ$ h15h YhR6hphKhR-4[555566=6i6j6~66666666767D77`gdpgd[gd+`gd+^gd+^gdpgdHy P^`PgdR6666666666666666667 777!7"7$7*7273767=7B7C7D7H7K7Q7Z7[7\7_7`77˾Ͼ˺˫˾ϾϾϾtlthB* phhhB* phhp5B*phhP{h5B*phh1hhP{hf]B5B*phhb<#hf]Bh[B* phhphP{h[5B*phh[hP{hP{5B*phhP{h+5B*phhP{5B*phh+hP{h+5)77777777777777777777777777$a$gdbgdHygd+gd[`gd[77777777777777777777777777777777777777777777ǸǸǸǸǧǸǸǸǸǧhwwh@ECJaJmHnHujhbhwwCJUaJhbhwwCJaJhq}jhq}U h}_hHyhHy h^fh[h[hf]Bh[B*ph+77gdHy5 01h:p/ =!"#`$`% 5 01h:pF&/ =!"#`$`% 5 01h:pp/ =!"#`$`% @@@ 0]NormalCJ_HaJmH sH tH DA@D Default Paragraph FontRi@R  Table Normal4 l4a (k@(No List4@4 bHeader  !4 @4 bFooter  !HH qf Balloon TextCJOJQJ^JaJK$/7n0MNOPy=>j/0Jr[\:K^0s0G|-KX Y  f 3 y A B +,wx`almf&VW:;hijBPQ[3KLMf$C^_ %' !IBCEF[j;<Tjk12w\ !p!=">""""#### $/$X$[$}$$$$$$ %#%%%s%%%%/&N&&&&& 'D'_'p'''''(((***,+++N,,[----..=.i.j.~......../6/D///////////////////////////00000 0 00000000000000000000000000000000000000000 0 0 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 0 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000@000@000@000@000@0@0@0@000P&r[:K^0s0GY  f B ,wx`almfijBPQ[3KLf$C^_%'BCEF[j;<Tjk1""#### $/$X$[$}$$$ %#%%%s%%++N,,[--.=.i......../6/D///00k,000000009c00800600"00&00&00&00&00&0 080 0600"00&00&00"00!000000000000100000.0000000.0000000000000!0100000$0/000'0/0+010+0/000/0/0000Ġ0000@0RV4@00000000080>080;080:D000060&0000000000000000000C03D060%060$0 0 0 0 0000000000000000O0*P0O0)0O0'@00 00T0:U`I0T070U080000T060Y07@000 00\06@000 00_0/0%000000%00%0 000\0)000 0 0000000000000000000000000000000000 00b0!cܕ0 00c00J00000J0K0J00J00 00 00R0S0R00R0000000000000000200 //////RRRRRRRRRU o &Bj3/ "$j&' ),-.]/3677 !#$&')+,.0135689;=>?ACE[ 0y$!%(,D/4777"%(*-/247:<@BDF7*,4;=BMOU!!!!Fi122 =">"""%#%#%%&&\-\-///////////////////////z~ko$.0I+.KO1704|  $ f l 3 9 y  B J ,3x%ahmt(,W`;gu{ BH4@[`gk$(CO,D[a<Bx~ ####*$-$$$ %%h%j%%%/&7&&&''D'G'_'e'p't'''''''( (((k)o)s)y)******,+:+++++`,c,,,--..=.C.~......//D/H///////////////3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333.P>0JK^0G .  $$ !$$%%D'_'[--~....///////////////////////////////////-r0Kj@*3dU|y\nkmah^fPu_>h^`CJOJQJaJo(hHh^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh^`B*OJQJo(phhHh^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh^`B*o(phhH.h ^`hH.h pLp^p`LhH.h @ @ ^@ `hH.h ^`hH.h L^`LhH.h ^`hH.h ^`hH.h PLP^P`LhH.h^`OJPJQJ^Jo(h^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh^`CJaJo(hH.h^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hH ^`OJQJo("  ^`OJQJo("  pp^p`OJQJo("  @ @ ^@ `OJQJo("  ^`OJQJo("  ^`OJQJo("  ^`OJQJo("  ^`OJQJo("  PP^P`OJQJo(" h^`CJOJQJaJo(hHh^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh ^`hH.h ^`hH.h pLp^p`LhH.h @ @ ^@ `hH.h ^`hH.h L^`LhH.h ^`hH.h ^`hH.h PLP^P`LhH.@*3h^f-|y\ dUu0kmajbc        ^%h                {?                 n2 lʂLI׼؇ jbc        OQ j<]U!"}no =%yGU{R{Ra ecg ;T\ M0|geBq{R5t^\ e;T?lfr^bj1|PWh#.\]F+[{RCe}!c#!\ Rx!"{R9%bjE )#xx2*E )Rg+h#.H^-eh#.dv+ij/\ M0E0eu2{Rs2{R k85{R;]6{RQ,7?;8]U4?h#. F;H?I{R6L{R^ O p8Z?O{R?P{RJIQE )QQh#.{RQ,7rRh#.vR;T]U1|3VbjW;T(tX\ XwZe]F+[Q B ^h#.'`\ Laee}!dv+i^%Ej\ bj(uK1%k{R?l}n5n\ Vo{Roh#. p FI*r]Ui`\sh#.(u_Yv@we#x%y_YvM4}{Rx`}!"$&u#p a +Gyo_eQa& bNQ/;$Mb<#=(}),+,`-p 57::z]<^<J@f]BCqqCvCi H I7JunKFyKW]LsMO=HOR>SW Y^[g^7_q`Zc^fqfOgiEtlnQo0\p|pqqer|JsiswwHywzP{b53T~0GToWLcXZkonX1mExf X]vt&.?H` IF&Z5@LNKb.z41`Q[p;R=plo|PGUSvXp]\I-q}Ky }_l{4@E;wokuT'}u"G )E|+U(@pe30]U[D@/0@UnknownGz Times New Roman5Symbol3& z Arial5& zaTahoma?5 z Courier New;Wingdings"1hѓ2ۦ2ۦw0(V(VI`x4d// 2QHX ?0]2ENGN 38 ENGINEERINGCity College of San Francisco,        Oh+'0 $0 P \ h tENGN 38 ENGINEERING Normal.dot City College of San Francisco119Microsoft Office Word@ oq@Z_@h@_(՜.+,0 hp  CCSFV/' ENGN 38 Title  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~Root Entry Ft _1TableHhWordDocumentSummaryInformation(}DocumentSummaryInformation8CompObjq  FMicrosoft Office Word Document MSWordDocWord.Document.89q