[C++] String과 char 배열 비교
- 컴퓨터공학과/Programming
- 2015. 10. 6.
입력을 받을 때 string과 char 차이!
1. input은 다음과 같다.
HELLO C++
2. 배열과 스트링 생성
1) char 배열 생성
간단하게 동적 배열 생성하지 않아도 되도록, 가장 큰 배열 수만큼 SIZE를 define 해두자
초기화는 memset이용하는데 여기서는 하지 않음
char arr[SIZE];
2) 스트링 생성
string s;
3. 표준 입력 읽어오기
1) char 배열 읽어오기
cin
for문 돌려서 일일이 받아와도 되지만 배열 전체로 받아와도 됨
공백, 개행 무시
cin >> arr;
** 입력이 H E L L O C + + 이런 식으로 띄어쓰기 되어있다면 for문으로 일일이 받아와야 한다**
2) 스트링 읽어오기
cin
#include <string> 필요
공백, 개행 무시
cin >> s;
4. 문자열 개수
1) char 배열 크기
strlen(const char*)
int size = strlen(arr);
2) 스트링 크기
length()
int size = s.length();
5. 표준 출력
1) char 배열 출력
역시 for문 돌려서 일일이 받아와도 되지만 배열 전체 출력가능
cout << arr;
혹은
for(int i = 0; i < strlen(arr); i++)
cout << arr[i];
2) 스트링 배열 출력
cout << s;
혹은
for(int i = 0; i < s.length(); i++)
cout << s[i];
<베열 예제1>
>> 소스 코드
#include <iostream>
using namespace std;
#define SIZE 10000
int main()
{
char arr[SIZE];
cin >> arr;
int size = strlen(arr);
cout << "크기 : " << size << endl;
cout << "내용 : " << arr << endl;
return 0;
}
>> 결과
크기 : 5
내용 : HELLO
<스트링 예제1>
>> 소스 코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >> s; // #include <string> 필요!
int size = s.length();
cout << "크기 : " << size << endl;
cout << "내용 : " << s << endl;
cout << "세번째 문자 : " << s[2] << endl; // 문자 하나씩 접근 가능
return 0;
}
>> 결과
크기 : 5
내용 : HELLO
세번째 문자 : L
그렇지만 'Hello C++'을 다 받고 싶은걸?
위의 경우에는 모두 공백을 만나면 입력을 끝내기 때문에 HELLO 밖에 받을 수가 없었다
cin 말구 표준 입력 읽어오기를 다시 해보자.
3. 표준 입력 읽어오기에서
1) char 배열 읽어오기
cin.getline(_Elem *_Str, streamsize _Count, _Elem _Delim)
cin.getline(변수 주소, 최대 입력 가능 문자수, 종결 문자)
_Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count)
{ // get up to _Count characters into NTCS, discard newline
return (getline(_Str, _Count, _Myios::widen('\n')));
}
변수 주소 : arr
최대 입력 가능 문자 수 : 문자 수를 알아야한다. 그 수를 종결로 처리하므로. 정해진 SIZE만큼 받아와도 문제는 없다. (대신 종결처리를 제대로 해줘야겠지?)
종결 문자 : 세번째 인자를 쓰지 않는다면 기본적으로는 개행을 종결 문자로 처리
cin.getline(arr, SIZE); // 종결 default: '\n'
2) 스트링 읽어오기
getline(basic_istream<_Elem, _Traits>& _Istr, basic_string<_Elem, _Traits, _Alloc>& _Str)
basic_istream<_Elem, _Traits>& getline(
basic_istream<_Elem, _Traits>& _Istr,
basic_string<_Elem, _Traits, _Alloc>& _Str)
{ // get characters into string, discard newline
return (getline(_STD move(_Istr), _Str, _Istr.widen('\n')));
}
// 위의 cin.getline과 비슷한 맥락, 그러나 최대 입력 가능 문자 수 입력하지 않아도 된다!
getline(cin, s);
<배열 예제2>
>> 소스 코드
#include <iostream>
using namespace std;
#define SIZE 10000
int main()
{
char arr[SIZE];
cin.getline(arr, 5);
int size = strlen(arr);
cout << "크기 : " << size << endl;
cout << "내용 : " << arr << endl;
return 0;
}
>> 결과
크기 : 4
내용 : HELL
여기서 중요한 것은 cin.getline(arr, 5)를 받았으면 arr의 5번째를 종결 문자로 처리하기 때문에, HELL까지 찍히는 것이다!
공백 처리가 되도록 20을 넣어보자
cin.getline(arr, 20);
<배열 예제3>
>> 소스 코드
#include <iostream>
using namespace std;
#define SIZE 10000
int main()
{
char arr[SIZE];
cin.getline(arr, 20);
int size = strlen(arr);
cout << "크기 : " << size << endl;
cout << "내용 : " << arr << endl;
return 0;
}
>> 결과
<배열 예제4>
>> 소스 코드
#include <iostream>
using namespace std;
#define SIZE 10000
int main()
{
char arr[SIZE];
cin.getline(arr, SIZE, ' ');
int size = strlen(arr);
cout << "크기 : " << size << endl;
cout << "내용 : " << arr << endl;
return 0;
}
>> 결과
크기 : 5
내용 : HELLO
<스트링 예제1>
>> 소스 코드
#include <iostream>
#include <string>
using namespace std;
#define SIZE 10000
int main()
{
string s;
getline(cin, s);
int size = s.length();
cout << "크기 : " << size << endl;
cout << "내용 : " << s << endl;
return 0;
}
>> 결과
<스트링 예제2>
>> 소스 코드
#include <iostream>
#include <string>
using namespace std;
#define SIZE 10000
int main()
{
string s;
getline(cin, s, ' ');
int size = s.length();
cout << "크기 : " << size << endl;
cout << "내용 : " << s << endl;
return 0;
}
>> 결과
크기 : 5
#include <iostream>
using namespace std;
#define SIZE 10000
int main()
{
char arr[SIZE];
cin.getline(arr, SIZE, NULL);
int size = strlen(arr);
cout << "크기 : " << size << endl;
cout << "내용 : " << arr << endl;
return 0;
}
>> 결과
'컴퓨터공학과 > Programming' 카테고리의 다른 글
[C++]정렬 알고리즘 프로그래밍-①코딩 준비하기 (0) | 2020.03.24 |
---|---|
[APM] PHP, Android, Mysql 연동시 한글 깨짐 문제 (8) | 2020.03.23 |
[Android] Unhandled event loop exception 에러 해결 (0) | 2014.03.05 |
[Android] plugins 에러 - Failed to create the part's controls 해결방법 (0) | 2014.03.05 |
[JSP] JSP + DB 연동 기본 구조(JDBC 로딩/DB 연동/SQL 실행 및 반환데이터 처리) (0) | 2014.01.06 |