본문 바로가기
Language/C#

[c#]string 사용법

by ninanio3 2012. 2. 17.

아래는 간단한 string 사용법을 익힐 수 있는 예제들이다.

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


namespace String_Exercise
{
    public class Program
    {
        static void Main(string[] args)
        {
            string s1 = " Good Morning. ";

            //모든 문자열 대문자로 바꾸기.
            //모든 문자열 소문자로 바꾸기.
            //-를 왼쪽에 채워서 20자 만들기.
            //-를 오른쪽에 채워서 20자 만들기.
            //5번째부터 제거
            //5번째부터 8글자 제거
            //양쪽 공백 제거
            //오른쪽 공백 제거
            //왼쪽 공백 제거
            //'G'를 'S'로 바꾸기
            //5번째 이후를 남기기 (0~4번째 제거)
            //5번째부터 8자 남기기
            //2번째에 'uu' 삽입하기
            //"o"를 포함하고 있나?
            //왼쪽부터 첫 번째 'o'위치.(없으면 -1)
            //마지막 'r'이 존재하는 위치
            //문자열의 길이(공백포함)
            //공백(" ")을 기준으로 s1을 분리.(먼저 공백제거)
            //문자열의 문자 타입의 배열로 만든다.(먼저 공백제거)
            //문자 타입의 배열을 문자열로 바꾼다.
            string[] keys = { "name", "age", "addr" };
            string[] values = { "hong", "14", "Seoul" };
            string [] keyval = new string[3];
            //위의 주어진 조건에서 "name = hong", "age = 14", "addr = Seoul" 형태로 출력을 시켜보자.
            //위의 조건 keyval에서, 떨어진 문자열을  분리자 '&'를 이용하여 붙여보자.
        }
        public static void Printf(string s)
        {
            Console.WriteLine(s);
        }
    }   
}



난 이 문제를 풀면서 싱글쿼테이션(')과 더블쿼테이션(")의 차이를 알게됐다.

string s14 = s1.Insert(2,'uu');
string s14번 문제, 2번째에 'uu'를 삽입하는 곳에서 single quotation을 쓰게 되면 아래와 같은 아름다운 에러를 볼 수 있다.

문자 리터럴에 문자가 너무 많습니다.
오류 2 'string.Insert(int, string)'에 가장 일치하는 오버로드된 메서드에 잘못된 인수가 있습니다.
'2' 인수 : 'char'에서 'string'(으)로 변환할 수 없습니다.

따옴표 하나 잘못썼다고 무슨 에러가 세 개 씩이나 뜬다. 그만큼... 더 많은걸 배울 수 있다는 얘기! ㅠㅠ

이 에러메시지는 일단 single quotation은 char형식으로 쓰인다 하는 내용이다.
그리고 char로 쓰려면 문자 하나만 써라! 문자 리터럴?? 리터럴이 문자인데..? 역전앞이구먼... 여튼.. char은 한 문자만 들어간다!
그리고 Insert 메서드는 string형식만 지원한다. 그러니깐 single quotation을 double quotation으로 변경해라. 이런 말이다. 일례로 Replace 메서드는 char형식과 string형식을 모두 지원한다. 그래서 string s11 = s1.Replace("g", "s"); 이런식으로 써도 무방하지만, char형식과 string형식을 혼용해서 쓰게 되면 또 아름다운 에러에 직면하게 된다.

string s14 = s1.Insert(s, "uu");

이렇게 코드를 고치면 문제없이 돌아간다. ㅎㅎ






아래는 완성된 코드다.



using System;
using System.Linq;
 
namespace HEK_Exercise
{
    public class Program
    {
        static void Main(string[] args)
        {
            string s1 = " Good Morning. "; Printf("s1 = " + s1);

            //모든 문자열 대문자로 바꾸기.
            string s2 = s1.ToUpper();Printf("s2 = " + s2);
            //모든 문자열 소문자로 바꾸기.
            string s3 = s1.ToLower(); Printf("s3 = " +s3);
            //-를 왼쪽에 채워서 20자 만들기.
            string s4 = s1.PadLeft(20, '-'); Printf("s4 = " + s4);
            //-를 오른쪽에 채워서 20자 만들기.
            string s5 = s1.PadRight(20, '-'); Printf("s5 = " +s5);
            //5번째부터 제거
            string s6 = s1.Remove(5); Printf("s6 = " + s6);
            //5번째부터 8글자 제거
            string s7 = s1.Remove(5, 8); Printf("s7 = " + s7);
            //양쪽 공백 제거
            string s8 = s1.Trim(); Printf("s8 = " + s8);
            //오른쪽 공백 제거
            string s9 = s1.TrimEnd(); Printf("s9 = " + s9);
            //왼쪽 공백 제거
            string s10 = s1.TrimStart(); Printf("s10 = " + s10);
            //'G'를 'S'로 바꾸기
            string s11 = s1.Replace("G", "S"); Printf("s11 = " + s11);
            //5번째 이후를 남기기 (0~4번째 제거)
            string s12 = s1.Substring(5); Printf("s12 = " + s12);
            //5번째부터 8자 남기기
            string s13 = s1.Substring(5, 8); Printf("s13 = " + s13);
            //2번째에 'uu' 삽입하기
            string s14 = s1.Insert(2, "uu"); Printf("s14 = " + s14);
            //"o"를 포함하고 있나?
            bool s15 = s1.Contains('o'); Printf("s15 = " + s15);
            //왼쪽부터 첫 번째 'o'위치.(없으면 -1)
            int s16 = s1.IndexOf('o'); Printf("s16 = " + s16);
            //마지막 'r'이 존재하는 위치
            int s17 = s1.LastIndexOf('r'); Printf("s17 = " + s17);
            //문자열의 길이(공백포함)
            int s18 = s1.Length; Printf("s18 = " + s18);
            //공백(" ")을 기준으로 s1을 분리.(먼저 공백제거)
            string[] s19 = s1.Trim().Split(' ');
            for (int i = 0; i < s19.Length; i++)
            {
                Console.Write("'" + s19[i] + "'");
            }
            Console.WriteLine();
            //문자열의 문자 타입의 배열로 만든다.(먼저 공백제거)
            char[] s20 = s1.Trim().ToCharArray();
            for (int i = 0; i < s20.Length; i++)
            {
                Console.Write("'" + s20[i] + "'");
            }
            Console.WriteLine();
            //문자 타입의 배열을 문자열로 바꾼다.
            string s21 = new string(s20); Printf("s21 = " + s21);

            string[] keys = { "name", "age", "addr" };
            string[] values = { "hong", "14", "Seoul" };
            string [] s22 = new string[3];
            //위의 주어진 조건에서 "name = hong", "age = 14", "addr = Seoul" 형태로 출력을 시켜보자.
            for (int i = 0; i < keys.Length; i++)
            {
                s22[i] = keys[i] + "=" + values[i];
                Console.WriteLine(s22[i]);
            }
            //위의 조건 keyval에서, 떨어진 문자열을  분리자 '&'를 이용하여 붙여보자.
            string div = " & ";
            string s23 = string.Join(div, s22); Printf("s23 = " + s23);
        }
        public static void Printf(string s)
        {
            Console.WriteLine(s);
        }
        public static void Printf(int s)
        {
            Console.WriteLine(s);
        }
        public static void Printf(bool s)
        {
            Console.WriteLine(s);
        }
    }   
}


이 문제의 출처는 c#프로그래밍 기본기 익히기, 정보문화사, 25000, 조효은지음,

'Language > C#' 카테고리의 다른 글

[c#]ArrayList  (0) 2012.03.22
[c#]char 사용법  (0) 2012.03.20
[c#] params 키워드 사용법  (0) 2012.01.20
c# 값타입으로 값을 전달하는 것과 참조타입으로 값을 전달하는 방법  (0) 2012.01.05
c# 오류목록 정리  (0) 2012.01.03