C#/문제 해결

Nullalbe 값 형식,StringBuilder

Game Client Lee Hwanguk 2023. 1. 26. 13:02

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/nullable-value-types

 

Null 허용 값 형식 - C# 참조

C# nullable 값 형식 및 사용 방법 알아보기

learn.microsoft.com

 

#Nullalbe (? type)

*어떠한 값도 가지지않는 변수가 필요할때

*0이 아닌 비어있는 변수, 즉 null상태인 변수

*type? name;

*HasValue-해당변수가 값을 갖고있는지 또는 그렇지 않은지 나타냄 / Value-변수에 담겨있는 값을 나타냄

using System;
using System.IO;

namespace HelloWorld
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int? a = null;
            //int b = null; //값을 할당하지않으면 사용할수없다(정의만 가능) / 값형식
            string c = null; //string은 가능(참조형식)

            Console.WriteLine(a.HasValue); //a는 null임으로 false 출력(Value를 가지고있는가? bool type)

            a = 37;
            Console.WriteLine(a.HasValue); //a에 값을 할당했음으로 true 출력
            Console.WriteLine(a.Value); //가지고있는 값 출력 (37 출력)

            int? num = null;
            Console.WriteLine(num.HasValue);
            Console.WriteLine(num != null); //false
            //Console.WriteLine(num.Value); //오류

            num = 3;
            Console.WriteLine(num.HasValue); //true
            Console.WriteLine(num != null); //true
            Console.WriteLine(num.Value); //3

        }
    }
}

 

https://learn.microsoft.com/ko-kr/dotnet/standard/base-types/stringbuilder

 

.NET에서 StringBuilder 클래스 사용

.NET에서 StringBuilder 클래스를 사용하는 방법을 알아봅니다. 이 클래스를 사용하면 새 개체를 만들지 않고 문자열을 수정합니다.

learn.microsoft.com

#StringBuilder

*추가되는 문자열의 개수가 동적인 경우 사용

*문자열에 대해 변경 사항이 많을 경우

*문자열의 갯수가 고정이면 string 사용

using System;
using System.IO;
using System.Text; //StringBuilder class 사용

namespace HelloWorld
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //StringBuilder 인스턴스 생성
            StringBuilder strBuilder = new StringBuilder("init stringBuilder");
            //용량 설정
            StringBuilder stringbuilderCapacity = new StringBuilder(10); //용량 10 설정
            StringBuilder stringBuilderMaxCapacity = new StringBuilder(10, 50); //용량 10, 최대 용량 50
            StringBuilder stringBuilderInit = new StringBuilder("init", 10); //초기화 후 용량 10 설정

            //메서드
            StringBuilder stringMethod = new StringBuilder("Init StringBuilder");
            Console.WriteLine("Append() 호출 전: " + stringMethod);
            stringMethod.Append("Value1"); //객체 끝에 추가

            stringMethod.Insert(0,"Init"); //지정한 위치(0)에 문자열 추가

            stringMethod.Remove(0, 3); //int a~int b까지의 문자열 삭제

            stringMethod.Replace("stringBuilder", ""); //해당 문자열을 변경
            



        }
    }
}

#Exam01_05 Queue(nullable과 StringBuilder 를 활용)

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Exam01_05
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int count = int.Parse(Console.ReadLine());
            Queue<int> queue = new Queue<int>();
            StringBuilder stringBuilder = new StringBuilder("");
            for (int i = 0; i < count; i++)
            {
                string[] input = Console.ReadLine().Split(' '); //입력받은 ReaLine을 (' ')간격으로 Split(나눠준다)

                switch (input[0]) //첫번째 입력받은 값
                {
                    case "push":
                        queue.Enqueue(int.Parse(input[1])); //두번째 입력받은 값
                        break;

                    case "pop":
                        stringBuilder.Append((queue.Count == 0) ? "-1\n" : queue.Dequeue().ToString() + "\n");
                        break; //string과 다르게 동적으로 변하는 StringBuilder사용, ? nullable 사용

                    case "front":
                        stringBuilder.Append((queue.Count == 0) ? "-1\n" : queue.Peek().ToString() + "\n");
                        break;

                    case "back":
                        stringBuilder.Append((queue.Count == 0) ? "-1\n" : queue.Last().ToString() + "\n");
                        break;

                    case "size":
                        stringBuilder.Append(queue.Count.ToString() + "\n");
                        break;

                    case "empty":
                        stringBuilder.Append((queue.Count == 0) ? "1\n" : "0\n");
                        break;

                    default:
                        break;
                }

            }
            Console.WriteLine(stringBuilder);
    }   }
}