For Loops, Strings, and Arrays : Word Jumble
For 반복문
계수 및 시퀀스를 이동하는 데 적합하다.
for (초기화; 테스트; 동작) 문장;
초기화는 루프의 초기 조건을 설정하는 문장
표현식 테스트는 루프 몸체가 실행되기 전에 매번 테스트된다.
프로그램이 실행되고, 동작이 실행된다 ( 종종 카운터 변수가 증가함 )
테스트가 거짓이 될 때까지 이 사이클이 반복되고, 그 시점에서 루프가 종료된다.
// Counter
// Demonstrates for loops
#include <iostream>
using namespace std;
int main() {
cout << "Counting forward:\n";
for (int i=0; i<10; i++)
{
cout << i <<" ";
}
cout << "\n\nCounting backward:\n";
for (int i=9; i>=0; i--)
{
cout << i << " ";
}
cout << "\n\nCounting by fives:\n";
for (int i=1; i<=50; i+= 5)
{
cout << i << " ";
}
cout << "\n\nCounting with null statements:\n";
int count = 0;
for (; count<10;)
{
cout << count << " ";
++count;
}
cout << "\n\nCounting with nested for loops:\n";
const int ROWS = 5;
const int COLUMNS = 3;
for (int i=0; i < ROWS; ++i)
{
for (int j=0; j < COLUMNS; ++j)
{
cout << i << "," << j << " ";
}
cout << endl;
}
return 0;
}
초기화문은 int i=0으로 i를 선언하고 0으로 초기화
표현식 i < 10은 i가 10보다 작은 동안 루프가 계속되도록 한다.
마지막 동작 문은 루프 본문이 완료될 때마다 i가 증가결과적으로 루프는 0~9까지의 값에 대해 10번 반복된다.
카운터 변수를 초기화하고 테스트 조건을 만든 후 카운터 변수를 원하는 값으로 업데이트할 수 있다.for 루프에서도 무한 루프에 대한 주의가 동일하게 적용된다,루프가 언젠가는 종료될 수 있는 루프를 만들어야 한다.for(;;)은 무한 루프를 만들 수 있다. 조건식이 비어있기 때문에 루프는 종료문을 만날 때까지 계속된다.
중첩된 for 루프
프로그램은 첫번째 외부 루프의 반복을 마지고 endl을 cout으로 보내어 첫번째 행을 종료한다.내부 루프가 외부 루프의 각 반복에 대해 전체적으로 실행된다.
객체 Object 이해
데이터와 함수를 결합하는 소프트웨어 object를 사용할 수 있다.오브젝트의 데이터 요소는 data member라고 하고, 함수는 member function이라고 한다.동일한 유형의 모든 객체는 동일한 기본 구조를 가지므로 각 개체는 동일한 데이터 멤버와 멤버 함수 세트를 가질 것이다.그러나 개별적으로 각 객체는 자체 데이터 멤버의 값을 가진다.객체의 좋은 점은 객체들을 사용하기 위해 구현 세부 정보를 알 필요가 없다는 것이다.예를 들어 자동차를 운전하기 위해서 자동차를 어떻게 만들 지 알 필요가 없다.객체의 데이터 멤버와 멤버 함수만 알면 된다.
내장 타입과 같이 객체들도 변수에 저장할 수 있다.멤버 선택 연산자 (.)를 사용하여 데이터 멤버와 멤버 함수에 액세스할 수 있다.
// ship is an object of Spacecraft type
if (ship.energy > 10)
{
ship.fireWeapons()
}
ship.energy는 객체의 에너지 데이터 멤버에 엑세스하고,
ship.fireWeapons()는 객체의 fireWeapons() 멤버 함수를 호출한다.
String Object
문자열 객체는 단어 퍼즐 게임을 작성하거나 단순히 플레이어의 이름을 저장하는 등 문자 시퀀스를 처리하는 방법이다.
문자열은 사실 객체이며, 문자열 객체를 사용하여 여러 작업을 수행할 수 있다.
// String Tester
// Demonstrates string objects
#include <iostream>
#include <string>
using namespace std;
int main() {
string word1 = "Game";
string word2("Over");
string word3(3, '!');
string phrase = word1 + " " + word2 + word3;
cout << "The phrase is: " << phrase << "\n\n";
cout << "The phrase has " << phrase.size() << "characters in it.\n\n";
cout << "The character at position 0 is: " << phrase[0] << "\n\n";
cout << "Changing the character at position 0.\n";
phrase[0] = 'L';
cout << "The phrase is now: " << phrase << "\n\n";
for (unsigned int i=0; i <phrase.size(); ++i)
{
cout << "Character at position " << i << " is: "<< phrase[i] << endl;
}
cout << "\nThe sequence 'Over' begins at location ";
cout << phrase.find("Over") << endl;
if (phrase.find("eggplant") == string::npos)
{
cout << "'eggplant' is not in the phrase.\n\n";
}
phrase.erase(4,5);
cout << "The phrase is now: " << phrase << endl;
phrase.erase(4);
cout << "The phrase is now: " << phrase << endl;
phrase.erase();
cout << "The phrase is now: " << phrase << endl;
if (phrase.empty())
{
cout << "\nThe phrase is no more.\n";
}
return 0;
}

string word3(3, '!'); -> !!!
세 문자열 객체를 연결하여 새로운 문자열 객체 phrase 생성
phrase == "Game Over!!!"
+ 연산자를 오버로드하여 문자열과 함께 사용하면 문자열 객체 연결을 의미
연산자 오버로딩은 익숙한 연산자를 새롭게 정의하여 새로운 컨텍스트에서 다르게 작동하도록 만드는 것
문자열 객체 phrase의 size() 멤버 함수를 연산자(.) 을 통해 호출
문자열 객체의 크기 즉 문자 수를 반환 ( 공백 포함 모든 문자 카운트 ) // length() 동일
문자열 객체는 char 값의 시퀀스를 저장
[]에 인덱스 번호를 제공하여 개별 char 값을 액세스할 수 있다.
size() 반환 값이 unsigned int 이기에 i도 unsigned int로 초기화
find() 함수를 사용하여 두 개의 문자열 리터럴이 phrase에 포함되어 있는 지 확인
find() 함수는 호출하는 문자열 객체에서 인수로 제공된 문자열을 검색한다.
문자열 객체에서 찾고 있는 문자열이 시작하는 첫 번째 발생 위치 인덱스를 반환한다.
eggplant가 phrase에 존재하지 않기 때문에 find()는 string 헤더 파일에서 정의된 특수한 상수를 반환한다.
이를 string::npos로 액세스한다.
string::npos를 통해 액세스하는 상수는 문자열 객체의 가능한 가장 큰 크기를 나타내므로 문자열 객체의 가능한 모든 유효한 인덱스보다 크다. 즉 한 문자열이 다른 문자열에서 찾을 수 없음을 나타낸다.
find("eggplant", 5); -> phrase의 인덱스 5부터 eggplant를 찾기 시작한다.
erase() 함수는 문자열 객체에서 지정된 서브 문자열을 제거한다.
phrase.erase(4,5); -> 인덱스 4에서 시작하는 5 글자의 서브 문자열을 제거한다.
phrase.erase(4); -> 인덱스 4에서 시작하는 객체의 모든 문자를 제거한다.
phrase.erase(); -> 모든 문자가 제거
empty() 함수는 bool 값이다.
문자열 객체가 비어 있으면 true를 반환하고 그렇지 않으면 false를 반환한다.
'C++' 카테고리의 다른 글
| beginning C++ through game programming / Chap 4 (0) | 2024.05.14 |
|---|---|
| beginning C++ through game programming / Chap 3-2 (0) | 2024.04.24 |
| beginning C++ through game programming / chapter 2-2 (0) | 2024.04.10 |
| beginning C++ through game programming / chapter 2-1 (0) | 2024.04.03 |
| beginning C++ through game programming / chapter 1 (0) | 2024.04.03 |