BCA/1. C,C++,C#
3일 : 포인터 입문, 아스키코드, 문자열 기초
Beabletoet
2018. 2. 7. 10:52
1 2 3 4 5 6 7 8 9 | #include<iostream> using namespace std; int main() { //변수의 메모리 주소 출력 int a; a = 5; cout << &a << endl; } | cs |
--
1 2 3 4 5 6 7 8 9 10 11 | #include<iostream> using namespace std; int main() { //포인터 입문 int a; a = 5; int *b = &a; *b = 15; cout << a << endl; } | cs |
--
1 2 3 4 5 6 7 8 | #include<iostream> using namespace std; int main() { //널 포인터를 출력하려고 하면? -> 에러!!!! int *c = NULL; cout << *c << endl; } | cs |
--
1 2 3 4 5 6 7 8 | #include<iostream> using namespace std; int main() { //아스키 코드 출력 char ch = 65; cout << ch << endl; } |
--
1 2 3 4 5 6 7 8 9 | #include<iostream> using namespace std; int main() { //문자열 기초 입출력 char ch[20]; cin >> ch; cout << ch; } |
--
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include<iostream> using namespace std; void sAdd(char* s, char* d); void sCopy(char* s, char* d); int main() { char a[10] = "abc", b[10] = "ef", c[10]; sCopy(c, a); sAdd(a, b); cout << a << "\n" << c << endl; } void sAdd(char* s, char* d) {//뒤에 있는 것을 앞의 뒤에 추가 int pos = 0; for (int i = 0; i < 10; ++i) if (s[i] == '\0') { pos = i; break; } for (int i = 0; i < 10; ++i) { s[i + pos] = d[i]; if (d[i] == '\0') break; } } void sCopy(char* s, char* d) {//뒤에 있는 것을 앞으로 복사 for (int i = 0; i < 10; ++i) { s[i] = d[i]; if (d[i] == '\0') break; } } | cs |
--위 코드를 발전
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include<iostream> using namespace std; void sAdd(char* s, char* d); void sCopy(char* s, char* d); int sLen(char* a); char* sCopy(const char* a); char* sAdd2(char* a, char* b); int main() { char a[10] = "abc", b[10] = "ef", c[10]; sCopy(c, a); sAdd(a, b); cout << a << "\n" << b << "\n" << c << endl; cout << sLen(a) << "\n" << sLen(b) << "\n" << sLen(c) << endl; char *d = sCopy("ABC"); cout << d << endl; char *e = sAdd2(a, b); cout << e << endl; } void sAdd(char* s, char* d) {//뒤에 있는 것을 앞의 뒤에 추가 int pos = sLen(s), i = -1; while(d[++i] != '\0') s[i + pos] = d[i]; s[i+pos+1] = '\0'; } void sCopy(char* s, char* d) {//뒤에 있는 것을 앞으로 복사 int i = -1; while(d[++i] != '\0') s[i] = d[i]; s[i] = '\0'; } int sLen(char* a) {//문자열 길이 출력 int i = 0; while (1) { if (a[i] == '\0') return i; ++i; } } char* sCopy(const char* a) {//인수 하나를 이용한 문자열 복사 int n = sLen((char*)a); char* r = new char[n+1]; for (int i = 0; i < n + 1; r[i] = *(a + i++)); return r; } char* sAdd2(char* a, char* b) {//a와 b 문자열을 합쳐 리턴하는 함수 int n = sLen(a) + sLen(b); char* r = new char[n + 1]; r = sCopy(a); sAdd(r, b); return r; } | cs |
--