[C++] string / vector / vector+구조체

2022. 6. 15. 16:11돌다리도 두드려보고 건너라 <복만살>

728x90
#include <iostream>
#include <string>

using namespace std;

void main()
{
	char charText[] = "Hello World";
	cout << "문자의 배열버전 : " << charText << endl;
	cout << endl << endl;

	string stringText;
	stringText = "Hello World";
	cout << "스트링 버전 : " << stringText << endl;

	cout << "문자열의 길이 : " << stringText.length() << endl;
	cout << "문자열 전체를 반환 : " << stringText.substr() << endl;
	cout << "시작인덱스로부터 끝까지 : " << stringText.substr(6) << endl;
	cout << "시작인덱스부터 길이만큼 : " << stringText.substr(6,2) << endl;
	cout << "문자열 속 찾을 문자열이 있는지, 있으면 그 문자열의 인덱스 반환 : " << stringText.find(" ") << endl;
	cout << "문자열 속 찾을 문자열이 없을때 나타나는 숫자 : " << stringText.find("*") << endl;
	cout << "위의 경우와 동일한 방법(string::npos) : " << string::npos << endl;

	// find가 가져온 값이 string::npos라는것은 못찾았다는 뜻
	if (stringText.find("*") == string::npos)
	{
		cout << "*은 " << stringText << " 안에 없다" << endl;
	}

	// 반대로 find가 가져온 값이 string::npos가 아니라는 것은 찾았다는 뜻
	if (stringText.find(" ") != string::npos)
	{
		cout << "공백은 " << stringText << " 안에 있다" << endl;
		cout << "인덱스는 " << stringText.find(" ") << endl;
	}

	cout << "0부터 공백까지 전체를 반환 : " << stringText.substr(0, stringText.find(" ")) << endl;
	
	string targetText = "Hello Hello World World";
	string result = "";

	while (targetText.find(" ") != string::npos)
	{
		result += targetText.substr(0, targetText.find(" "));
		targetText = targetText.substr(targetText.find(" ") + 1);
	}
	result += targetText;
	cout << "공백을 없애고 문자열 전체 반환 : " << result << endl;

	stringText += "글자추가";
	stringText = stringText + "글자또추가";
	cout << "같은 문자열끼리 더할수 있음 : " << stringText << endl;

	string numText = "100";
	cout << "stoi는 문자열을 정수형으로 변환 : " << stoi(numText) + 50 << endl;
	cout << "to_string는 숫자를 문자열로 변환 : " << to_string(stoi(numText) + 50) + "점" << endl;
}

출력 결과

#include <iostream>
#include <string>
#include <vector>

using namespace std;


void main()
{
	// vector<데이터타입> 변수명;
	//	vector<데이터타입> 변수명(크기);	생성자가 있을경우 미리 공간을 할당해줌.
	// intVec와 intArray 둘다 int형 원소를 10개 가지고 있다.
	// 둘다 같은 기능을 수행한다
	vector<int> intVec(10);	// 벡터는 동적배열이기때문에 크기를 늘려줄수 있다.
	int intArray[10];		// 일반배열은 인덱스범위를 초과할수 없다.

	/*
	for (int i = 0; i < 10; i++)
	{
		intArray[i] = i*5;
		intVec[i] = i*5;
		cout << "배열 " << i << "번째의 값 : " << intArray[i] << endl;
		cout << "벡터 " << i << "번째의 값 : " << intVec[i] << endl;
	}
	*/

	// push_back(값); 벡터의 맨뒤에다가 원소를 추가
	intVec.push_back(10);
	intVec.push_back(20);
	intVec.push_back(30);
	intVec.push_back(40);

	// insert(추가하고싶은 위치, 추가할 값); 추가할 값 삽입
	intVec.insert(intVec.begin() + 2, 50);

	// erase(삭제하고싶은 위치); 지움
	intVec.erase(intVec.begin() + 0);

	cout << "size() 벡터 속 원소의 개수를 반환 : " << intVec.size() << endl;

	for (int i = 0; i < intVec.size(); i++)
	{
		cout << intVec[i] << endl;
	}


}

출력결과

#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct Temp
{
	int value;
	Temp()
	{

	}
	Temp(int _value)
	{
		value = _value;
	}

	void PrintValue()
	{
		cout << "정보출력 : " << value << endl;
	}

	void AddValueOne()
	{
		value++;
	}
};


void main()
{
	Temp tempA(10);
	Temp tempB(20);
	Temp tempC(30);
	Temp tempD(40);

	vector<Temp*> tempVec;
	tempVec.push_back(&tempA);
	tempVec.push_back(&tempB);
	tempVec.push_back(&tempC);
	tempVec.push_back(&tempD);

	cout << "tempVec의 사이즈 : " << tempVec.size() << endl;

	for (int i = 0; i < tempVec.size(); i++)
	{
		tempVec[i]->AddValueOne();
		tempVec[i]->PrintValue();
	}
	cout << "-----------------------" << endl;
	tempA.PrintValue();
	tempVec[0]->PrintValue();
}

출력 결과

 

728x90