C#/문제 해결
Nullalbe 값 형식,StringBuilder
Game Client Lee Hwanguk
2023. 1. 26. 13:02
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);
} }
}