문자열

 

hello world같은 글을 문자열이라고 한다.
문자열을 사용할땐 string을 include해서 사용한다.
string은 기본자료형이 아닌 사람들이 만들어 놓은 사용자 정의 자료형으로 생각하면된다.
다른 기본자료형처럼 =,(),{}방식으로 정의가 가능하다.
숫자가 입력가능하지만 정수형이 아닌 문자형 ""으로 입력해야한다.
입력받을땐 다른 자료형과 같이 cin사용하는 것이 아닌 std::getline(std::cin,str);을 사용한다.
정수형(int)을 입력받고 std::getline(std::cin,str);을 사용하면 기존 버퍼에 남아있던 정수가 출력된다.
std::cin.ignore(32767,'\n');
std::cin.ignore(std::numeric_limits::max(), '\n');
을 이용해 정수입력이후 문자열을 입력받을 수 있다.
+,+=로 문자열에 문자열을 추가해줄 수 있다. append라고한다.
문자열 길이는 .length()로 확인할 수 있다.
string 문자열은 마지막에 문장마무리표시가 들어가있어 길이 1이 추가된다.

 

#include <iostream>
#include <string>
#include <limits>

using namespace std;

int main()
{
	//문자열을 출력한다.
	//아래글자는 char[12]로 출력된다.
	cout << "hello world" << endl;

	int age = 0;
	cin >> age;
	cout << age << endl;
	//cin 버퍼 초기화
	std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
	const string str = "hello world";
	cout << str << endl;
	//숫자입력
	string num = "123";


	string num2 = "";
	//문자열 입력
	std::getline(std::cin, num);
	std::getline(std::cin, num2);

	//문자열 더하기(append)
	cout << num + num2 << endl;
	num += "test";

	//문자열 길이
	cout << num.length() << endl;
	return 0;
}

문자

- C프로그램의 문자는 아스키 코드를 따른다.


- 아스키 코드는 0~127중의 1바이트로 구성되며 주요 문자를 출력하도록 해준다.

+ 0 = 48, A = 65, a = 97


- 컴퓨터는 내부적으론 다 숫자로 처리한다.


버퍼

- 문자열을 처리할 때 버퍼의 개념이 많이 사용된다.


- 버퍼(buffer)란 임시적으로 특정한 데이터를 저장하기 위한 목적으로 사용한다.


- C 프로그램은 기본적으로 사용자가 의도하지 않아도 자동으로 버퍼를 

  이용해 입출력을 처리한다.


  - scanf로 5를 입력하게되면 버퍼에 5를 입력할때 입력된 엔터도 저장되게된다.

    while((temp = getchat()) != EOF && temp != '\n') {} 구문으로 엔터를 제거해준다.

실습내용


실습결과




문자열

- 문자열은 말 그대로 문자들의 배열이다


- 문자열은 컴퓨터 메모리 구조상에서 마지막에 널(NULL) 값을 포함한다.

+끝을 알기위해 NULL(\0) 한자리가 추가된다.




문자열과 포인터

- 문자열 형태로 포인터를 사용하면 포인터에 특정한 문자열의 주소를 넣게된다.


- 예를들어 char *a = "Hello World"라는 문자열이 입력되면 읽기 전용으로 

  메모리 공간에 넣고 그 위치를 처리한다.


- 위에 방식을 "문자열 리터럴"이라고 한다.


- 문자열리터럴방식은 컴파일러가 알아서 메모리 주소를 결정한다.


  - gets()함수를 이용하게 문자배열의 길이를 제한할 수 없다.

    gets_s()함수를 사용하여 문자배열 크기만큼 입력받고 넘을경우 런타임 오류를 낸다.

실습내용

실습결과


문자열함수

- strlen()은 문자열의 길이를 반환한다.


- strcmp()는 문자열1이 문자열2보다 사전적으로 앞에 있으면 -1, 뒤에 있으면 1을 반환한다.


- strcpy()는 문자열을 복사한다.

  기본적으로 C언어에선 a = b같은 방법으로 복사가 안된다.


- strcat()는 뒤에 있는 문자열을 앞에 있는 문자열에 합친다.


- strstr()은 긴 문자열에서 짧은 문자열을 찾아 그위치를 반환한다.

  짧은 문자열을 찾은 주소 값 자체를 반환하므로 단순히 출력하면

  찾은 이후 모든 문자열이 반환된다.

실습내용

실습결과


String 개념

String문자는 ""를 사용해 만들어진다.



위처럼 text란 String을 만들게되면 문자란 값을 상수저장소(Constant pool)에 저장한다.


동일한 "문자" 라는 문자열을 생성할경우


위에 말했듯이 String text를 생성할때 상수저장소에 저장하게되는데

text2가 만들어질때 상수저장소를 확인하고 "문자"가 있을경우 그 참조한 값을 반환한다.

text,text2 참조값은 같다.

그러므로 text와 text2는 같다.


상수저장소란?

- String객체를 저장하는 메모리 구역이다.


즉, 문자열이 이미 존재하면 새로운 객체를 생성하지않고

기존객체를 사용하여 효율적이게된다.


위처럼 new String으로 문자열 생성시 상수저장소에 저장하지않고

일반 힙 메모리에 String객체를 생성한다.

text와 text2의 참조값이 다르다.

text==text2는 될수 없다.


String 비교방법

1.equals() 메소드

2.단순 == 비교

3.compareTo() 메소드


equals() 메소드

equals와 equalsIgnoreCase 있다.


equals이란?

문자열의 내용을 비교하는 것이다.



equalsIgnoreCase이란?

문자열의 특징을 무시하고 비교하는 것(쉽게말해 소문자,대문자)이다.



단순 == 비교

위에 String 개념에서 설명한다.


compareTo() 메소드

문자열 길이를 비교해 정수를 반환해준다.

같다면 0

크다면 1

작다면 -1





변수란?

데이터 타입이다.
primitive type(원시 타입)이라고 불린다.
앞 글자를 소문자로 사용한다.

int <-상수, 소수점을 받아들이지 않는다.
ex) int myInt = 2;

short <- 용량을 작게 차지한다.
(큰 숫자는 안됨)
ex) short myShort = 1;

long <- 큰 숫자에 사용한다.(마지막에 L을 붙임)
ex) long myLong = 1L;

double <- 소수점에 사용한다.
ex) double myDouble = 1.2;

float <- 용량을 작게 차지한다.(특이점 :마지막에 f를 붙인다.)
float myFloat = 1.3f;

char <- 문자열에 사용한다.(특이점:한 글자만 사용 가능하고,''작은따옴표로 사용한다.)
ex) char myChar = 'c';

boolean <- 참, 거짓에 사용한다.(true, false)
ex) boolean myBoolean = false;

byte <- 용량 표현에 사용한다.
ex) byte myByte = 24;

문자열이란?

primitive type(원시 타입) 아니다.
String -> ""사용, 숫자도 문자로 인식한다.
ex) String text = "number : "+myInt;
특이점:뒤에 int형을 문자로 인식한다.

text = myInt; <-X
ex) primitive type 형태만 입력은 안된다.

String 뒤에 숫자 가와도 String으로 인식한다.
primitive type 뒤에 문자열은 안된다.
ex) text = text+": "+myInt;


+ Recent posts