1 / 25

CS31: Introduction to Computer Science I

CS31: Introduction to Computer Science I. Discussion 1A 5/14/2010 Sungwon Yang swyang@cs.ucla.edu www.cs.ucla.edu/~swyang. Quick Review. What did we learn last week? C-strings string type can be used only in c++ C-string is an array of characters

jalena
Télécharger la présentation

CS31: Introduction to Computer Science I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS31: Introduction to Computer Science I Discussion 1A 5/14/2010 Sungwon Yang swyang@cs.ucla.edu www.cs.ucla.edu/~swyang

  2. Quick Review • What did we learn last week? • C-strings • string type can be used only in c++ • C-string is an array of characters • it must end with zero byte/null character : ‘\0’ • indicates the end of the string • C-string input/output • cout prints out characters until it meets null character • cin.getline reads one line • need to specify the maximum length of the input string • null character will be automatically inserted • converting C-strings to C++ strings • simple ‘=‘ operator works • not vice versa • C-string functions : #include <cstring> • strlen(s) • returns the length of s, not counting ‘\0’ • strcpy(t, s) • copies the string s to t • strcat(t, s) • concatenate (append) s to the end of t • strcmp(t, s) • compare t and s • return 0 if they are equal • return something greater than 0 if t > s • return something less than 0 if t < s

  3. Pointers • where are variables stored? • how can computers know where they are?? 001FFD08 10 int main () { int a = 10; double d = 5.5; char c = ‘a’; bool b = true; } ⁞ ⁞ ⁞ ⁞ 002FDC68 5.5 ⁞ ⁞ 002FF128 a ⁞ ⁞ 004DEF00 true

  4. Pointers • Variables are stored in memory locations • The memory location of a variable is called the address of the variable • The address specifies a place, not a value • Pointer variables store the address!

  5. pointers int main () { int a = 10; int b = 100; int* ptr1; int *ptr2; ptr1 = &a; ptr2 = &b; int sum = *ptr1 + *ptr2; cout << ptr1 << " : " << ptr2 << endl; cout << &ptr1 << " : " << &ptr2 << endl; cout << a << " : " << b << endl; cout << *ptr1 << " : " << *ptr2 << endl; cout << sum << endl; } 001AF73C : 001AF738 001AF744 : 001AF740 10 : 100 10 : 100 110

  6. pointers • multiple pointers can point to the same variable int main () { int* ptr1; int *ptr2; int a = 10; ptr1 = &a; ptr2 = ptr1; cout << *ptr1 << endl; cout << *ptr2 << endl; } 10 10

  7. quick questions • what will be displayed? int main () { int a = 10; int *ptr = &a; int *p = ptr; cout << a << endl; cout << *&a << endl; cout << *ptr << endl; cout << *p << endl; } int main () { int* ptr1; int *ptr2; int a = 10; int b = 100; ptr1 = &a; ptr2 = &b; a = *ptr2+2*a; b = *&b*b; cout << b+*ptr1 << endl; } 10 10 10 10 10120

  8. pointers and arrays • The name of an array is a pointer to its first element(item) int main () { int arr[10] = {0,1,2,3,4,5,6,7,8,9}; cout << arr << endl; cout << &arr[0] << endl; } 22FE38DF 22FE38DF

  9. array element access • when an array is created, items are allocated in consecutive memory spaces • if we know the beginning address, we know the locations of all the items. int main () { int i = 5; int arr[10] = {10,1,2,3,4,5,6,7,8,9}; cout << *arr << endl; cout << *(arr+ 1) << endl; cout << *(arr + 2) << endl; cout << *arr + 3 << endl; cout << *arr + 4 << endl; cout << *(arr + i) << endl; cout << *arr+ i+1 << endl; } 10 1 2 13 14 5 16

  10. Pointers and functions • Pointer is one type of variable • stores addresses • Pointers can be function parameters • Value pointer parameters • Reference pointer parameters • Pointers can be function return values • Value returned is a pointer

  11. value parameter • passing pointer by value • cannot change the address outside • but, can change the values pointers point to void func(int* arg1, int* arg2) { int* temp; temp = arg1; arg1 = arg2; arg2 = temp; cout << *arg1 <<" : "<< *arg2 << endl; } int main () { int a = 10, b = 100; int *ptr1 = &a, *ptr2 = &b; func(ptr1, ptr2); cout << *ptr1 <<" : "<< *ptr2 << endl; } void func(int* arg1, int* arg2) { *arg1 = 100; *arg2 = 10; cout << *arg1 <<" : "<< *arg2 << endl; } int main () { int a = 10, b = 100; int *ptr1 = &a, *ptr2 = &b; func(ptr1, ptr2); cout << *ptr1 <<" : "<< *ptr2 << endl; } 100 : 10 10 : 100 100 : 10 100 : 10

  12. reference parameter • passing pointer by reference • can change the address outside void func(int* &arg1, int* &arg2) { int* temp; temp = arg1; arg1 = arg2; arg2 = temp; cout << *arg1 <<" : "<< *arg2 << endl; } int main () { int a = 10, b = 100; int *ptr1 = &a, *ptr2 = &b; func(ptr1, ptr2); cout << *ptr1 <<" : "<< *ptr2 << endl; } 100 : 10 100 : 10

  13. Project #5 • Plain Text File Reformatter • reformats a plain text file into neatly arranged paragraphs with a particular maximum allowed line length • int reformat(istream& inf, ostream& outf, intlineLength); • an already-opened input source you will read from (probably a file the caller opened). • an already-opened output destination you will write to (probably either cout or an output file the caller created) • an int with the desired maximum line length • return value • 0 if is successful (i.e., neither of the following problems occurs) • 1 if any input word portion is longer than the maximum line length • 2 if the desired maximum line length is less than 1

  14. definition of an word • A word is a sequence of non-whitespace characters. • The <cctype> function isspace tells you if a character is a whitespace character • A word can be viewed as a sequence of one or more word portions

  15. reformatting rules • Fit as many word portions in an output line as you can without exceeding the line length. Output lines may well end up being different lengths, giving a "ragged-right" effect It•always•does•seem•to•me•that•I•am doing•more•work•than•I•should•do.••It•is not•that•I•object•to•the•work,•mind•you; I•like•work:•it•fascinates•me.••I•can sit•and•look•at•it•for•hours.••I•love•to keep•it•by•me:•the•idea•of•getting•rid of•it•nearly•breaks•my•heart.

  16. reformatting rules • Words in an output line must normally be separated by one blank. • if the last character of an output word is a period, question mark, or exclamation point, it must be separated from any following word on that output line by two blanks. • The last word on an output line must not be followed by any blanks. • The first word portion on an output line must not be preceded by any blanks. • Blanks must not appear on an output line within any word. • The last line of output must end with a newline, and there must be no output lines (not even empty ones) after the last word of the last paragraph. It•always•does•seem•to•me•that•I•am doing•more•work•than•I•should•do.••It•is not•that•I•object•to•the•work,•mind•you; I•like•work:•it•fascinates•me.••I•can sit•and•look•at•it•for•hours.••I•love•to keep•it•by•me:•the•idea•of•getting•rid of•it•nearly•breaks•my•heart.

  17. reformatting rules • If a word portion is longer than the line length, as much as will fit must be on an output line by itself. • The rest of that word portion must begin the next output line (and, of course, is subject to similar splitting if it's too long). • If this situation ever occurs, your function continues reformatting, but it must eventually return 1 instead of 0 to its caller. • Notice that this is the only situation where a word is allowed to be split across lines other than at a hyphen. abcdefghij klmnopqrst uvwxyz function returns 1

  18. reformatting rules • A paragraph break is indicated in the input by one or more consecutive lines that contain no words (i.e., are empty or contain only whitespace characters). • The first word in the input following a paragraph break will be the first word of a new paragraph in the output. • If a paragraph has already been output, the new paragraph must be separated from the one that precedes it by an empty line (i.e., a line with no characters other than the terminating newline). The very first output paragraph must not be preceded by an empty line I•love•to•keep•it•by•me:•the•idea•of getting•rid•of•it•nearly•breaks•my heart. You•cannot•give•me•too•much•work;•to accumulate•work•has•almost•become•a passion•with•me:

  19. more rules • Your reformat function and any functions you write that it calls directly or indirectly must not use any std::string objects. If you need to use a string, use a C string. • Your function may assume that no input line will be 200 or more characters long. • This project is doable without assuming any upper limit for the output line length (the third parameter of reformat) — rather than storing the parts of an output line in a C string to be written later, you instead write them as soon as you can. However, some people may not figure out how to do that, so we'll give you a choice. If the third parameter of reformat is greater than 500, your implementation of reformat must either: • return 2 without writing any output • reformat the text using the indicated line length, returning 0 or 1 as appropriate (i.e., your algorithm doesn't impose any upper limit on the output line length). Implementing this choice correctly is worth 5 bonus points.

  20. File I/O • #include <iostream> #include <fstream> • ifstream • input file stream type • this object will be associated with a particular file • ofstream • output file stream type • this object will be associated with a particular file

  21. Advice from Professor • Break down the function into two major tasks • one fetches next word from the input text file • identifies the next interest is a word, paragraph break, or the end of file • if it is a word, get the word • the other one writes the fetched word according to the defined format • will it be the first word in a line? • will it be the last word in a line? • does it end with period/question mark/exclamation?

  22. getting next word • basically deliver a single word to the reformat function • read single character in text file • .get() function • need code that skips redundant spaces • isspace() function • maybe helpful to provide additional information along with the word • is this word preceded by a newline? • is this word followed by a newline?

  23. sample code bool getWord(istream& inf, char outWord[], int& wordLen) { char c; int index = 0; do { if ( ! inf.get(c)) return false; } while (isspace(c)); do { outWord[index] = c; index++; if ( ! inf.get(c)) break; } while( ! isspace(c)); outWord[index] = '\0'; wordLen = index; return true; } int main () { ifstream inf("input.txt"); char word[200]; int wordLen; while (getWord(inf, word, wordLen)) { cout << word << " : "; cout << wordLen << endl; } } Hello everyone, my name is Sungwon Yang. Nice to meet you! Hello : 5 everyone, : 9 my : 2 name : 4 is : 2 Sungwon : 7 Yang. : 5 Nice : 4 to : 2 meet : 4 you! : 4

  24. sample code • it eliminates all spaces/newlines • need to add some code that identifies line breaks Hello everyone, my name is Sungwon Yang. Nice to meet you! Hello : 5 everyone, : 9 my : 2 name : 4 is : 2 Sungwon : 7 Yang. : 5 Nice : 4 to : 2 meet : 4 you! : 4

  25. writing text in file • it is very similar to cout object int main () { ofstream outText("result.txt"); char space = ' '; char newline = '\n'; char word1[10] = "Hello,"; char word2[10] = "how"; char word3[10] = "are"; char word4[10] = "you?"; outText << word1 << newline; outText << word2 << space << word3 << space << word4; } Hello, how are you?

More Related