Search
Duplicate

C# 입문 1. 자료형, 문자열 가지고 놀기

간단소개
Piscine처럼 C#을 배우기
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C#
태그
C#
Scrap
8 more properties

알립니다

1. 이 글은 <이것이 C#이다>를 바탕으로 쓰여졌으며,
2. Libft 과제를 통과하셨다면 큰 무리 없이 읽을 수 있게 작성됐습니다.
3. 자세한 설명이 필요하시다면 검색과 MS의 C# 자습서를 참고하시거나, 혹은 클러스터의 집현전과 42서울 전자도서관에서 E-Book 대여로 <이것이 C#이다>를 빌려보시는 것을 추천합니다.
4. 오류가 있거나, 질의가 있으시다면 Slack(sangtale)으로 DM 주시길 바랍니다!

컴파일(빌드)부터 개발환경 세팅은 아래의 글을 참고하시길 바랍니다.

Mac

조금 특별한 개념이라면 직접 타이핑하고 컴파일 해보시는 것을 추천드립니다

1. 자료형

기본적인 자료형

달라진 크기 값과 표기 방식(uint 등)에 유의하세요!
특이점으로는 bool 형식을 기본적으로 제공한다는 점이 있겠네요

문자열(string)

C와는 다르게 C#에는 문자열을 다루는 자료형인 string이 있습니다.
이전 글이나 혹은 다른 글을 보셨다면, string 자료형을 보셨을텐데요.
문자열 자료형은 이렇게 선언합니다.
string 변수이름; const string 상수이름 = "상수의 내용";
C#
그렇다고 char 배열을 문자열에 쓰면 안 될까요? 또 그렇지는 않습니다.
using static System.Console; namespace Hello { class MainApp { static void Main() { char[] greeting = {'h', 'e', 'l', 'l', 'o'}; Console.WriteLine(greeting); } } }
C#
위처럼 코드를 작성하고 빌드 후 출력하면?
정상적이게 “hello”가 출력되는 모습을 보실 수 있습니다.
그밖에도 object, 위에서 보셨다시피 상수형(const), 열거형(enum) 형식이 있습니다.
상수형과 열거형에 대해서는 이미 알고 계시리라, 그리고 object에 대한 자료형은 추후로 미루겠습니다!

Nullable

C와는 다르게 C#은 어떤 자료형이 Null 값을 가질 수 없습니다.
//C에서 가능했던 코드지만 int a = NULL; char n = NULL; //C#에서는 불가능합니다.
C
킹치만… Null은 필요한 걸…!
int? a = Null;
C#
짠! 그래서나온 자료형이 바로 Nullable!
Null(널) + able(가능한)의 합성어인 자료형입니다.
이 특이한 자료형은 Null이 될 수도 있고, 안 될 수도 있습니다.
using static System.Console; namespace Hello { class MainApp { static void Main() { char? molloo = null; WriteLine(molloo); WriteLine(molloo.HasValue); WriteLine("mollo is null? : {0}", molloo == null); molloo = (char)42; WriteLine(molloo); WriteLine(molloo.HasValue); WriteLine("mollo is null? : {0}", molloo == null); } } } /* [출력 결과] >> >> True >> mollo is null? : False >> * >> False >> mollo is null? : True */
C#

var

킹갓 자료형 var입니다. 컴파일러가 컴파일 타임에 알아서 데이터 타입을 맞춰줍니다.
(C++의 auto와 비슷합니다)
다만 쓸 수 없는 상황이 몇 가지 있는데, 바로 아래의 코드를 살펴보시죠.
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int i = 10; var j = 10; Console.WriteLine(i.GetType().ToString()); Console.WriteLine(j.GetType().ToString()); var f = 0.5f; var d = 0.44; Console.WriteLine(f.GetType().ToString()); Console.WriteLine(d.GetType().ToString()); var s = "string"; Console.WriteLine(s.GetType().ToString()); int[] arr = { 1, 2, 3, 4, 5 }; //var안됨 var arr2 = new int[10]; Console.WriteLine(arr.GetType().ToString()); Console.WriteLine(arr2.GetType().ToString()); foreach (var item in arr) { Console.WriteLine(item.GetType().ToString()); break; } } } }
C#
그렇습니다. {}이니셜라이저로 배열을 만드는 경우에선 안 됩니다. 지역변수로만 사용할 수 있습니다. 또한 상수형처럼 선언과 동시에 초기화를 해야 하는 점도 있습니다.
그런데 위의 코드에서 쓰인 .ToString()이 뭘까요? 대충 느낌은 오겠지만, 정확한 것이 궁금하시다면 바로 다음 장으로 넘어가시죠!

2. 문자열 다루기

문자열을 다루는 간략한 메소드(함수)들을 알아볼 겁니다.
Libft에서 다뤘던 함수들의 작동 방식이 비슷합니다(성능과 이름까지 정확히 일치하는 Split, Strtrim도 있습니다. 여기서는 Trim입니다).
예제가 있는 것도, 그리고 없는 것도 있습니다. C언어와 Libft에서 구현한 어떤 함수와 비슷한 지 따로 적지는 않았으니, 직접 비교하시면서 코드를 작성해 보시는 것은 어떨까요?

문자열 탐색하기

문자열 변형하기

정수를 문자로, 문자를 정수로(Int To Ascii, Ascii To Int)

문자열 합치기(병합)하기

만들어 보기

아래와 같은 프로그램을 만들어 봅시다!

1. 프로그램 실행과 동시에 문자열을 2개 입력 받습니다.
2. 첫 번째 입력받은 문자열 두 번째 입력받은 문자열이 있다면, 첫 번째 입력받은 문자열 두 번째 입력받은 문자열 자른 후 출력합니다.
3. 만약 첫 번째 입력받은 문자열두 번째 입력받은 문자열이 없다면, 두 문자열을 합치고 합친 문자열의 총 길이를 다시 문자열에 합친 후, 반환합니다.
예시 이미지는 아래와 같습니다.