Develop/C, C++

[C/C++] ํ•จ์ˆ˜์™€ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์–ด๋ณด์ž!

JuniTech 2023. 10. 12. 21:29
728x90
C/C++

๐Ÿ“œ ๋ฌธ์ œ

๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๊ณ , ํฌ์ธํ„ฐ์™€ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž!

 

๐Ÿ“ฅ์ž…๋ ฅ

Hi! Welcome!

๐Ÿ“ค์ถœ๋ ฅ

!emocleW !iH

์ž…์ถœ๋ ฅ ๊ฒฐ๊ณผ

๐Ÿ’กํ’€์ด

์šฐ์„  ๋ฐฐ์—ด๋ช… ๊ทธ ์ž์ฒด๋กœ ํฌ์ธํ„ฐ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์ž. ๊ตณ์ด ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•  ํ•„์š”๋„ ์—†์ด ๋ฐฐ์—ด๋ช…์œผ๋กœ ์ธ์ž๋ฅผ ๊ฑด๋„ค์ฃผ๋ฉด ๋œ๋‹ค.
 
๋‹ค์Œ์œผ๋กœ ์•Œ์•„์•ผ ํ•  ํ•จ์ˆ˜๋“ค์€ strlen() ๊ณผ fgets() ํ•จ์ˆ˜์ด๋‹ค.
๋จผ์ € strlen() ํ•จ์ˆ˜๋Š” NULL ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ  string ๊ธธ์ด๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ฆ‰ ๋ฐ›๋Š” ๋ฌธ์ž์—ด ์นธ 100๊ฐœ์—์„œ ๋ฐ›์€ ๋ฌธ์ž์—ด์ด 39๊ฐœ๋ผ๋ฉด ๋’ค์˜ 61๊ฐœ์˜ NULL ๋ฌธ์ž๋“ค์„ ์ œ์™ธํ•˜๊ณ  ๋”ฑ ๋“ค์–ด์™€ ์žˆ๋Š” ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ 39๋ผ๋Š” ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ์ด๋‹ค. strlen() ์•ž์—๋‹ค๊ฐ€ (int)๋ฅผ ๋ถ™์—ฌ์„œ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋„๋ก ํ•œ๋‹ค.
 
๋‹ค์Œ์œผ๋กœ fgets() ํ•จ์ˆ˜๋Š” ์ฒ˜์Œ C์–ธ์–ด ์ž…๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒ ์ƒ์†Œํ•  ์ˆ˜๋„ ์žˆ๋‹ค. IBM ๋ฌธ์„œ์—์„œ๋Š”  ํ˜„์žฌ stream ์œ„์น˜์—์„œ ์–ด๋А ๊ฒƒ์ด ๋จผ์ € ์˜ค๊ฑด ์ฒซ ๋ฒˆ์งธ ์ค„ ๋ฐ”๊พธ๊ธฐ ๋ฌธ์ž(\n)๊นŒ์ง€, ์ŠคํŠธ๋ฆผ์˜ ๋๊นŒ์ง€ ๋˜๋Š” ์ฝ์€ ๋ฌธ์ž ์ˆ˜๊ฐ€ n-1๊ณผ ๊ฐ™์„ ๋•Œ๊นŒ์ง€ ๋ฌธ์ž๋ฅผ ์ฝ๋Š” ํ•จ์ˆ˜๋ผ๊ณ  ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. ์ฆ‰, ๋ฌธ์ž๋ฅผ ๋๊นŒ์ง€ ์ฝ์–ด์„œ ๊ฒฐ๊ณผ๋ฅผ string์— ์ €์žฅํ•˜๊ณ  ์ŠคํŠธ๋ง ๋์— ๋„(null) ๋ฌธ์ž(\0)๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋–„ string์€ ์ค„ ๋ฐ”๊พธ๊ธฐ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•œ๋‹ค(์ฝ์€ ๊ฒฝ์šฐ์—๋งŒ!). ๋”ฐ๋ผ์„œ n์ด 1์ด๋ฉด ์ค„ ๋ฐ”๊พธ๊ธฐ ๋ฌธ์ž๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ˆ string์ด ๋น„์–ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” 'fgets(๋ฐ›์„ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜, ๋ฐ›์„ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜์˜ ๊ธธ์ด, ๋ฌธ์ž์—ด์„ ์ฝ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ํŒŒ์ผ ํฌ์ธํ„ฐ)'๋กœ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
 
ํ˜น์‹œ๋‚˜ ๋ชจ๋ฅผ๊นŒ๋ด stream์˜ ์ •์˜์— ๋Œ€ํ•ด ๊ธฐ์ˆ ํ•˜๊ฒ ๋‹ค.
์ŠคํŠธ๋ฆผ ์ •์˜

"์ŠคํŠธ๋ฆผ" (stream)์€ ๋ฐ์ดํ„ฐ์˜ ์—ฐ์†์ ์ธ ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์€ ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์ •ํ•œ ์†๋„๋กœ ์—ฐ์†์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ „๋‹ฌ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์ปดํ“จํ„ฐ ๊ณผํ•™ ๋ฐ ์ •๋ณด ๊ธฐ์ˆ  ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ํ†ต์‹ ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:
์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ (Input/Output Stream): ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŒŒ์ผ, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ, ํ‚ค๋ณด๋“œ ๋˜๋Š” ๋งˆ์šฐ์Šค ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์›๋ณธ ๋˜๋Š” ๋Œ€์ƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ํ‘œํ˜„ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๊ธฐ ์œ„ํ•ด ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ (Data Stream): ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์€ ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ์˜ ์—ฐ์†์ ์ธ ํ๋ฆ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์„ผ์„œ ๋ฐ์ดํ„ฐ, ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฏธ๋””์–ด (์˜ˆ: ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ), ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์€ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ ํŒจํ‚ท์ด๋‚˜ ํ”„๋ ˆ์ž„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ค€๋น„๋Š” ๋‹ค ๋˜์—ˆ๋‹ค. ๋ฌธ์ž์—ด๋ฅผ ๋’ค์ง‘๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ temp ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ์— n-k๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ์ €์žฅํ•˜๊ณ , n๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ n-k๋ฒˆ์งธ ๋ฌธ์ž์—๋‹ค๊ฐ€ ์ €์žฅํ•œ ๋’ค, n-k๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ์ €์žฅํ•ด๋‘” temp ๋ณ€์ˆ˜๋ฅผ n๋ฒˆ์งธ ๋ฌธ์ž์—๋‹ค๊ฐ€ ์ €์žฅํ•ด์ฃผ๋ฉด ๋์ด๋‹ค!

์•„๋ž˜๋Š” ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ด๋‹ค.

#include <stdio.h>
#include <string.h>

void reverseString(char* str) {
    char temp;
    for (int i = 0; i < (int)(strlen(str) / 2); i++) {
        temp = str[(int)strlen(str) - i - 1];
        str[(int)strlen(str) - i - 1] = str[i];
        str[i] = temp;
    }
}

int main() {
  char str[100];

  printf("๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜์‹œ์˜ค.: ");
  fgets(str, sizeof(str), stdin);
  
  reverseString(str);

  printf("๋’ค์ง‘์–ด์ง„ ๋ฌธ์ž์—ด ๊ฒฐ๊ณผ: %s\n", str);
  return 0;
}