강께르의 개발일지

[문제 풀기] 문자열에 대해서 본문

프로그래밍/C#

[문제 풀기] 문자열에 대해서

강께르 2021. 9. 14. 02:22

1. 입력 받은 문자열을 뒤집어서 출력

string input1 = Console.ReadLine();
string temp = String.Empty;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = input1.Length - 1; i >= 0; i--)
{
   sb.Append(input1.ToCharArray()[i]);
}
Console.WriteLine(sb.ToString());
// 역순으로 인덱스를 참조해서
// stringbuilder 클래스에 append 시켜 문자열 생성 후 출력

2. 입력 받은 문자열의 단어의 수를 출력

string input2 = Console.ReadLine();

Console.WriteLine(input2.Split().Length);
// Split의 반환값으로 String[]가 반환되는데 그 데이터형의 Length를 출력하면
// 분할된 문자열의 갯수를 알 수 있다.

3. 입력 받은 문자열에서 알파벳, 숫자 갯수를 출력하라

string input3 = Console.ReadLine();
int cnt = 0;
for (int i = 0; i < input3.Length; i++)
{
   int c = input3.ToCharArray()[i];
   if (c >= '0' && c <= '9') cnt++;
   else if (c >= 'A' && c <= 'z') cnt++;
}
Console.WriteLine(cnt);
// 아스키 코드값을 이용해 카운트한다.

4. 입력 받은 문자열에서 가장 많은 문자를 찾아라.

string input4 = Console.ReadLine();
int max = 0;
int idx = 0;
for (int i = 0; i < input4.Length - 1; i++)
{
	char c1 = input4.ToCharArray()[i];
	int count = 0;
	for (int j = i + 1; j < input4.Length; j++)
	{
		char c2 = input4.ToCharArray()[j];
		if (string.Compare(c1.ToString(), c2.ToString()) == 0)
        	count++;
    }
 	if (count > max)
	{
		idx = i;
    	max = count;
    }
}
Console.WriteLine(input4.ToCharArray()[idx]);
// 검사받을 문자열의 문자 하나를 선택해 앞에서부터 순차적으로 검사
// 카운트가 가장 높은 값과 인덱스를 저장한다.
// 검사를 다 마치면 그 인덱스의 문자를 출력

string input4 = Console.ReadLine();
string result = string.Empty;
int max = 0;

foreach(var i in input4)
{
    int count = 0;
    for (int j = 0; j < input4.Length; j++)
    {
    	char c = input4.ToCharArray()[j];
        if (string.Compare(i.ToString(), c.ToString()) == 0)
        	count++;
    }
    if (count > max)
    {
    	result = i.ToString();
        max = count;
    }
}

Console.WriteLine(result);

// foreach 버전

5. 입력 받은 문자열의 대소문자를 바꿔서 출력해라.

 

string input5 = Console.ReadLine();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < input5.Length; i++)
{
 	char c = input5.ToCharArray()[i];
 	if (c >= 'A' && c <= 'Z') sb.Append(c.ToString().ToLower());
 	else if (c >= 'a' && c <= 'z') sb.Append(c.ToString().ToUpper());
   	else sb.Append(c.ToString);
}
Console.WriteLine(sb.ToString());
// 아스키 코드값을 이용해 범위 내에 있는 문자를 변환하는 함수로 변환하고
// StringBuilder 클래스에 append하여 출력한다.

string input5 = Console.ReadLine();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach(var i in input5)
{
	if (i >= 'A' && i <= 'Z') sb.Append(i.ToString().ToLower());
	else if (i >= 'a' && i <= 'z') sb.Append(i.ToString().ToUpper());
	else sb.Append(i.ToString());
}
Console.WriteLine(sb.ToString());
// foreach의 Enumerator도 아스키코드 연산이 된다.

6. 문자열 2개를 입력 받아서 첫번째 문자열에 두번째 문자열이 몇 번 등장하는지 출력해라.

string input6 = Console.ReadLine();
string input6_1 = Console.ReadLine();
int cnt = 0;

for (int i = 0; i < input6.Length - (input6_1.Length - 1); i++)
{
	if (string.Compare(input6.Substring(i, input6_1.Length), input6_1) == 0)
	{
		cnt++;
	}
}
Console.WriteLine(cnt);

// 검사할 문자열을 찾을 문자열의 길이만큼 순차적으로 잘라서 검사한다.
// 문자열이 7인 경우
// 찾을 문자열 길이 3
// 최대 길이 5만큼 순회하면
// 마지막 검사 길이는 4 5 6이어서 문자열을 모두 검사할 수 있게 된다.

cnt = input6.Split(input6_1).Length;

Console.WriteLine(cnt - 1);

// 더 쉬운 방법...
// 구분자로 분할한 문자열 배열들의 수 - 1이 구분자로 구분된 찾을 문자열의 개수를 의미

'프로그래밍 > C#' 카테고리의 다른 글

[수업] 20210916_4일차  (0) 2021.09.17
[문제 풀기] 클래스에 관하여  (0) 2021.09.16
[수업] 20210915_3일차  (0) 2021.09.16
[수업] 20210914_2일차  (0) 2021.09.14
[수업] 20210913_1일차  (0) 2021.09.14