임의의 문자열을 입력받고, 거꾸로 출력하는 프로그램.
#include <stdio.h> #include <string.h> int main() { char buffer[80]; char *p = buffer; // char형 포인터 p에 char형 배열 buffer의 시작 위치를 대입 int len; printf("Input String : "); scanf_s("%s", buffer,80); len = strlen(p); // 시작위치부터 NULL문자가 나올때까지의 값을 리턴함. while (*p) { //*p의 값이 문자일 경우 0이 아닌 값으므로 참이고, NULL일경우 0으로 거짓이 되므로 while문을 빠져나간다. p++; //p가 가리키는 위치를 마지막으로 보낸다. } printf("Inverse String : "); for (int i = 0; i < len; i++) { p--; putchar(*p); } //p가 가리키는 위치를 한칸씩 당기면서 한글자씩 출력. putchar('\n'); }
같은 작동을 하지만 조금 변경한 것
#include <stdio.h> int main() { char buffer[80]; char *p = buffer; // char형 포인터 p에 char형 배열 buffer의 시작 위치를 대입 int len = 1; printf("Input String : "); scanf_s("%s", buffer,80); while (*p) { //*p의 값이 문자일 경우 0이 아닌 값으므로 참이고, NULL일경우 0으로 거짓이 되므로 while문을 빠져나간다. p++; //p가 가리키는 위치를 마지막으로 보낸다. len++; } printf("Inverse String : "); for (int i = 0; i < len; i++) { putchar(*--p); // *--p가 된다. } //p가 가리키는 위치를 한칸씩 당기면서 한글자씩 출력. putchar('\n'); }
배열을 포인터로 활용하는 예제1
#include <stdio.h> int main() { int arr[] = { 5,8,3 }; int s = 1, *p; p = &arr[0]; // p = arr; 이라 쳐도 동일하다. for (int i = 0; i < 3; i++) { printf("arr[%d] = %d \n", i, arr[i]); } for (int i = 0; i < 3; i++) { s = s * *(p + i); //앞의 *는 곱하기, 뒤의 *는 포인터 연산자 } //int *p = arr 일 때, *(p+i) == p[i]와 동일하다. printf("\n arr[0] * arr[1] * arr[2] = %d \n", s); }
배열을 포인터로 활용하는 예제2
#include <stdio.h> int main() { int arr[] = { 0,1,2,3,4,5,6,7,8,9 }; int w = 0, *p = arr; for (int i = 0; i < 10; i++) { printf("arr[%d] = %d \n", i, arr[i]); } for (int i = 1; i < 10; i += 2) { w += *(p + i); } printf("\narr[1] + arr[3] + arr[5] + arr[7] + arr[9] = %d \n", w); }
배열을 포인터로 활용하여 최대값과 최소값을 찾는 예제
#include <stdio.h> int main() { int arr[] = { 34,-67,25,43,-69,29 }; int *p, max = arr[0], min = arr[0]; int maxloc, minloc; p = arr; printf("arr[] = {"); for (int i = 0; i < sizeof(arr)/sizeof(int); i++) { if (*(p + i) > max) { max = *(p + i); maxloc = i + 1; } if (*(p + i) < min) { min = *(p + i); minloc = i + 1; } printf(" %d ", *(p + i)); } printf("} \n"); printf("최댓값 : %d, 위치 : %d \n", max, maxloc); printf("최솟값 : %d, 위치 : %d \n", min, minloc); }
포인터로 함수에 문자열을 전달해서 교환하는 예제.
void Change(char* x, char* y); int main() { static char a[] = "abcdefg"; static char b[] = "1234567"; printf("Before Change \n"); printf("-------------------------\n"); printf("a[] = %s \n", a); printf("b[] = %s \n", b); printf("\n"); Change(a, b); printf("After Change \n"); printf("-------------------------\n"); printf("a[] = %s \n", a); printf("b[] = %s \n", b); } void Change(char* x, char* y) { char temp; while (*x) { temp = *x; *x = *y; *y = temp; x++; y++; } }
포인터로 함수에 문자열을 전달해서 소문자를 대문자로, 대문자는 소문자로 바꾸는 예제
#include <stdio.h> void chUp(char* ptr); int main() { char arr[100]; printf("소문자를 대문자로 바꿀 문자열을 입력하세요 : "); scanf_s("%s", arr, 100); chUp(arr); printf("바꾼 문자열은 %s 입니다", arr); } void chUp(char* ptr) { while (*ptr) { if ('a' <= *ptr && *ptr <= 'z') { *ptr -= 32; } else if ('A' <= *ptr && *ptr <= 'Z') { *ptr += 32; } ptr++; } }
두 문자열에서 같은 위치에 나타나는 문자들을 찾는 예제
#include <stdio.h> int main() { char arrx[20], arry[20]; char *xp, *yp; printf("첫번째 문자열을 입력하세요 : "); scanf_s("%[^\n]s", arrx, 20); while (getchar() != '\n') {} printf("두번째 문자열을 입력하세요 : "); scanf_s("%[^\n]s", arry, 20); xp = arrx; yp = arry; printf("\n"); int i = 1; while (!(*xp == '\0' && *yp == '\0')) { if (*xp == *yp) { printf("같은 글자 : %c, 위치 : %d \n", *xp, i); } xp++; yp++; i++; } }
#include <stdio.h> const char* DayName(int n) { const char* day[] = { "일", "월", "화", "수", "목", "금", "토" }; return day[n]; } int main() { int n; printf("일요일부터 n일 지난 날의 요일을 확인합니다. \n"); printf("n값을 입력하세요 : "); scanf_s("%d", &n); printf("일요일로부터 %d일 지난 날은 %s요일 입니다.\n", n, DayName(n % 7)); }
입력된 알파벳으로 시작하는 과일이름을 출력하는 프로그램
#include <stdio.h> const char* fruit(char s) { switch (s) { case 'a': return "apple"; case 'b': return "banana"; case 'o': return "orange"; case 's': return "strawberry"; case 'g': return "grape"; case 'p': return "pineapple"; case 't': return "tomato"; default: return "Fruit name is not exist!!!"; } } int main() { char str[2]; do { printf("input first one character : "); scanf_s("%c", str,2); if (*str == 'q' || *str == 'Q') { return 0; } printf("fruit = %s \n",fruit(*str)); while (getchar() != '\n') {} } while (1); }
#include <stdio.h> #include <string.h> const char* maker(int n); const char* car(int n); int main() { char str[20]; int k = 0; printf(" Maker => "); scanf_s("%s", str, 20); while (k < 4) { if (!strcmp(str, maker(k))) { printf("car name => %s \n", car(k)); return 0; } k++; } printf("일치하는 메이커가 없습니다. \n"); } const char* maker(int n) { const char* MakerName[] = { "KIA", "HYUNDAI", "DAEWOO", "SSANGYONG" }; return MakerName[n]; } const char* car(int n) { const char* CarName[] = { "pride", "sonata", "espero", "korando" }; return CarName[n]; }
함수 포인터 사용 예제
#include <stdio.h> #include <math.h> double sigma (double(*tring_func) (double), double dLower, double dUpper); int main() { double dSum; dSum = sigma(sin, 0.1, 1.0); printf("The Sum of the sine from 0.1 to 1.0 is %g \n", dSum); dSum = sigma(cos, 0.5, 3.0); printf("The Sum of the cosine from 0.5 to 3.0 is %g \n", dSum); } double sigma(double(*tring_func) (double), double dLower, double dUpper) { double dCount, dTotal = 0.0; for (dCount = dLower; dCount <= dUpper; dCount += 0.1) { dTotal = dTotal + tring_func(dCount); } return dTotal; }