22.12.26. 복습, ToSting()과 ToCharArray()

김도익·2022년 12월 26일
0

C#

목록 보기
8/29

<22.12.26.(월)>

▶type : 이진수를 해석하는 방법입니다. 그래서 정말 중요합니다. 잘 생각하고 사용해야합니다.

▶문맥교환

  • 기존 프로세스의 문맥을 PCB에 저장하고 새로운 프로세스를 실행하기 위해서 문맥을 PCB로 부터 적재하여 새로운 프로세스를 실행하는 것을 말합니다.

<복습>

▶문자열

  • 프로그램에서 문자를 문자열(string)이라고 합니다.

  • string은 읽기만 가능합니다. 문자열 합치기만 가능하지, 정수형으로 합은 불가능합니다.

    Tip. 문자열 "6" 과 문자열 "8"을 더하면 "68"이 됩니다.
    문자열"78" 과 문자열 "19"를 더하면 "7819"가 됩니다.
    문자열 "Hello"와 "World"를 더하면 "Hello Wolrd"가 됩니다.
    정말 중요한 것입니다. 꼭 기억하세요.
    문자열에서 숫자를 숫자로 생각하는 사고를 버리고, 정말 하나의 문자로 생각해서 접근하는 사고가 필요합니다.

  • 문자열 리터럴은 ""를 사용합니다.

  • 특정문자에 접근하기 위해선 인덱서를 활용해 특정 문자에 접근할 수 있습니다. 주의 사항은 인덱스는 꼭 0부터 시작해야되는 것입니다.

  • 역슬래쉬()를 사용하기 위해선 \두개를 써야합니다. 이를 이스케이프 시퀀스라고 합니다.

  • 문자열 합치기!!
    더하기 연산자를 사용해서 문자열을 합칠 수 있습니다.
    Concat()을 사용해서 합칠 수 있습니다.

  • Format()
    {0}{1}을 사용해서 문자열을 출력해줍니다.

  • 문자열 보간
    Format보다 상위 개념으로 {변수}를 사용해서 문자열을 출력해줍니다.

  • Concat()
    string message4 = string.Concat(message, message1);
    새로운 객체를 만듭니다.

  • Replace()
    문자 교체

  • Length
    문자열 길이 출력

  • Substring()
    문자열에서 부분 문자열을 출력할 수 있습니다.

  • Parse, Convert를 사용해서 문자열을 다른 타입으로 변경이 가능합니다.

  • Compare : 지정된 두 String 개체를 비교하고 누가 더 사전순으로 앞서있는지를 알려줍니다.
    예시로 보여드리겠습니다.
    string message1, message2;
    message1.CompareTo(message2);
    string.Compare(message1, message2);

  • Equals() : 단순 비교일때 많이 씁니다.
    string message1, message2;
    message1.Equals(message2);

▶ StringBuilder

  • string 타입은 불변(Immutable)입니다.
    string message = "Hello";
    message[0] = 'e'; // 오류 발생
    값이 다른 string타입의 객체는 모두 다른 메모리 주소를 가지고 있습니다.
    string message1 = string.Concat(message2, message3);
    //새로운 객체 생성
    message4 = string.Format("{0}{0}", message);
    // 새로운 객체 생성
    message = message.Replace("H", "C");
    // 새로운 객체 생성
    message = message.ToUpper();
    // 새로운 객체 생성
    message = message.ToLower();
    // 새로운 객체 생성

  • StringBuiler stb = new StringBuilder();
    stb.Append("Hello");
    stb.AppendLine("Wolrd!");
    // 다양한 문자열을 합칠때 유용한것이 StringBuilder이다.
    // 새로운 객체를 생성하지 않고, 기존 메모리의 쌓아나가는 방법이다.
    string message1 = stb.ToString();
    string message2 = "Hello" + "World!"
    // message1의 속도가 message2 보다 훨씬 빠르다.

  • 메모리 단편화를 주의해야합다.
    string.Concat(str1, str2)을 사용하면 연속된 공간이 있는지 탐색해야되고, str1을 복사하고, str2를 복사하고 결과물을 돌려줘야합니다.

    하지만 StringBuilder를 사용하면 연속된 공간을 바로 사용할 수 있기 때문에 용이하다고 볼 수 있습니다.

▶배열

  • 같은 타입으로 된 여러 개의 객체를 한 번에 다루고자할떄 사용합니다.

  • int[] arr = new int[숫자];

  • 인덱스를 0부터 시작하는 이유는 시작 주소를 알기 위해서입니다. 시작 주소를 알면 연속적으로 저장된 데이터를 통해 메모리를 사용할 수 있기 때문입니다.

  • 다차원 배열
    보통 3차원 배열까지 사용합니다.
    ,로 구분짓습니다.

  • 가변 배열
    배열안에 배열이 있다고 생각하면 됩니다.
    int[][] array = new int[숫자][숫자];

▶선택문

  • 진리값
    0은 거짓, 0이외의 값은 참.

  • 불리언 타입
    참과 거짓의 데이터를 저장할 수 있는 타입입니다.
    조건을 평가하는 곳은 모두 불리언 타입을 사용합니다.

  • 논리 연산자
    &&, ||
    단축 평가의 유의하면서 효율적으로 식을 작성하면 좋습니다.

  • if문
    참일때 발동, 거짓일때를 쓰고 싶다면 else if, else

  • switch문
    case : 명령어 //case 뒤에는 숫자, 문자를 써야합니다.
    break;

Tip
문제를 단계별로 나누는 습관을 들여야한다.
만약 단계를 나눠도 풀리지 않는다면 단계에서 더 단계로 나눠서 풀어본다.

  • ToString()
    문자열로 바꾸겠다.

  • ToCharArray()
    문자형식의 배열로 바꾸겠다.

  • ToString()과 ToCharArray()를 사용한 예제를 보여드리겠습니다.
    문제(프로그래머스) 자릿수 더하기 : 정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요.

<프로그래머스를 visual로 옮겨서 푸는 점이 좋습니다. 그래서 visual로 옮기는 방법과 함께 설명하겠습니다.>

using System;

class Program
{
	 public static int solution(int n)
{
    int answer = 0;
    string a = n.ToString(); //n을 문자열로 바꿔줍니다.
    int sum = 0;
    char[] arr = a.ToCharArray(); //a를 문자배열 형식으로 바꿔줍니다.
    for(int i = 0; i < arr.Length; i++)
    {
        sum += arr[i] - 48;  // char형식은 int.Parse가 불가능합니다.
                             // 그래서 나온 숫자의 값은 아스키코드값으로 반환되서 나옵니다.
                             // 0의 아스키코드는 48입니다. 48을 '0'으로 바꿀 수 있습니다.
    }
    

    return answer = sum; //sum을 answer한테 넣어줘야합니다. 
    				     // 넣지 않는다면  answer은 0값 그대로 출력됩니다. 꼭 기억하세요!!

}

static void Main()
{
    
    string input = Console.ReadLine();
    int n = int.Parse(input);
    int answer = solution(n); //sum값이 들어간 answer를 answer에 대입합니다.
    Console.WriteLine(answer); // 대입된 anwer를 출력합니다.
}
}
  1. static void Main()위에 public int solution(int n)을 넣고, public 다음 static{}을 넣습니다.

  2. 그리고 static void Main(){
    string input = Console.ReadLine();
    int n = int.Parse(input);
    int answer = solution(n);
    Console.WriteLine(answer);} 내가 출력하고자 하는 값을 넣어줍니다.

<이제 프로그래머스로 옮겨보겠습니다.>
public int solution(int n)
{
int answer = 0;
string a = n.ToString();
int sum = 0;
char[] arr = a.ToCharArray();
for(int i = 0; i < arr.Length; i++)
{
sum += arr[i] - 48;
// arr[i]에서 나오는 값은 숫자가 아닌, 숫자가 갖고 있는 아스키 코드 값이 나온다. 그래서 48을 빼거나, '0'을 빼줘야한다.
// 48을 빼는 이유는 0의 아스키코드 값은 48이기 때문이다.
// 48 대신 '0'을 빼도 된다. 그냥 0이면 안된다. '0'이여야한다.
// '0'에서 ''는 문자를 나타내는 리터럴이니까 주의해서 사용하자.
// 만약 그냥 0을 뺀다면 아스키코드값 그대로 나오게된다. 결국 내가 원하는 값을 얻지 못한다.

    }
    

return answer = sum;

}
이렇게 public에서 static만 제외하고 옮겨주면 됩니다!

▶Char 타입은 int.Parse(), Convert.Int32()로 변경이 불가능합니다. 즉 char 타입은 int형식으로 변환이 불가능합니다. 단 다양한 방법으로 정수를 만들 수 있습니다.

  • arr[i] - 48을 int number = int.Parse(arr[i].ToString()) 바꿔줄 수 있습니다.
  • arr[i] - 48을 (int)(arr[i] - '0')으로 바꿔줄 수 있습니다.
profile
고급 개발자가 되고 싶어요!

0개의 댓글