<C++> 문자열

긍이·2023년 11월 5일
0

C++

목록 보기
6/12
post-thumbnail

이번엔 백준 알고리즘 5단계 문자열을 풀어볼려구한다!

📌 문자열

✔ char

char : 문자형 변수 (정수를 입력하면 ascll코드로 인식)

char s = 65; cout << s; //  A  (ASCII 에서 65는 A)
s = 'a'; cout << s; // a
s = '1'; cout << s; // 1

✔ string

string : 문자를 담을 수 있는 클래스

[인덱스] : 인덱스의 문자 (char)
front() : 맨 앞 문자
back() : 맨 뒷 문자
size() : 문자열 길이
length() : 문자열 길이
empty() : 문자열 공백 체크
swap(a,b) : 문자열 a,b 를 교체
clear() : 문자열 비움
a.append(b) : a 뒤에 b 추가
a.find(b) : a에서 b 인덱스
substr(인덱스,길이) : 일부 반환 (string)
begin() : 문자열 시작 인덱스
end() : 문자열 끝 인덱스
replace(인덱스, 길이, 문자열) : 인덱스부터 길이만큰 문자열로 변경

string::npos : 존재 여부 체크

입출력을 풀때 문자열+정수가 안되는거에 대해 당황했었는데
문자열끼리는 +를 사용해서 합칠 수 있다고 한다

✔ 27866번 문자와 문자열

인덱스 번호는 0부터 시작되므로 찾고자하는 인덱스에서 -1을 한다

#include <iostream>

using namespace std;

int main()
{
	string S;
	int i;

	cin >> S >> i;

	cout << S.substr(i-1,1); 
}

hello 2
e

✔ 2743번 단어 길이 재기

#include <iostream>

using namespace std;

int main()
{
	string s;
	cin >> s;
	cout << s.size();
}

pulljima
8

✔ 9086번 문자열

문자열을 다 받고 연속해서 출력을 해야하는 문제

for문으로 T만큼 받아서 리스트에 저장한 후
front(), back()을 이용해서 출력을 하려고 해봤는데 정상적으로 출력이 되지 않았다

#include <iostream>

using namespace std;

int main()
{
	int T;
	cin >> T;

	string* s = new string[T];

	for (int i = 0; i < T; i++)
	{
		cin >> s[i];
	}

	for (int i = 0; i < T; i++)
	{
		cout << s[i].front() + s[i].back() + "\n";
	}
}

3
abc
ppp
lll
i s

cin으로 바로 리스트에 넣는 건 안되는 것 같아서
따로 문자열을 받아서 첫번째와 마지막을 리스트에 넣고
마지막에 리스트를 반환하려고 했는데 이것두 안된다

#include <iostream>

using namespace std;

int main()
{
	int T;
	cin >> T;

	string* s = new string[T];

	for (int i = 0; i < T; i++)
	{
		string ns;
		cin >> ns;
		s[i] = ns.front() + ns.back();
	}

	for (int i = 0; i < T; i++)
	{
		cout << s[i] + "\n";
	}
}

3
abc
ppp
lll
?
?
?

front() + back()으로 저장은 안되는데
front()
+= back() 으로 시도하니깐 정상적으로 출력이 되었다

#include <iostream>

using namespace std;

int main()
{
	int T;
	cin >> T;

	string* s = new string [T];

	for (int i = 0; i < T; i++)
	{
		string ns;
		cin >> ns;
		s[i] = ns.front();
		s[i] += ns.back();
	}

	for (int i = 0; i < T; i++)
	{
		cout << s[i]+"\n";
	}
}

3
abc
o
aaa
ac
oo
aa

✔ 11654번 아스키 코드

#include <iostream>

using namespace std;

int main()
{
	char s;

	cin >> s;

	cout << int(s);
}

A
65

string to int

stoi / stof / stol / stod
문자열을 int, float, long, double로 변경

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s;

	cin >> s;

	cout << stoi(s);
}

123
123

✔ 11720번 숫자의 합

#include <iostream>
#include <string>

using namespace std;

int main()
{
	int N;
	cin >> N;
	string s;
	cin >> s;
	int sum = 0;

	for (int i = 0; i < N; i++)
	{
		sum += stoi(s.substr(i,1));
	}
	cout << sum;
}

4
4444
16
c++ 문자열 체크

✔ 10809번 알파벳 찾기

#include <iostream>

using namespace std;

int main()
{
	string S;
	cin >> S;

	for (int i = 0; i < 26; i++)
	{
		char c = i + 97;
		int idx = -1;

		if (S.find(c)!= string::npos)
			idx = S.find(c);
		cout << idx << " ";
	}
}

beakjoon
2 0 -1 -1 1 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

✔ 2675번 문자열 반복

#include <iostream>
#include <list>

using namespace std;

int main()
{
	int T;
	cin >> T;

	list<string> slist;


	for (int i = 0; i < T; i++)
	{
		int R;
		string S;
		cin >> R >> S;
		string P;
		for (int j = 0; j < S.size(); j++)
		{
			for (int k = 0; k < R; k++)
			{
				P += S[j];
			}
		}
		slist.push_back(P);
	}

	int size = slist.size();

	for (int i = 0; i < size; i++)
	{
		cout << slist.front() << "\n";
		slist.pop_front();
	}
}

2
3 abc
2 o
aaabbbccc
oo

✔ 1152번 단어의 개수

#include <iostream>
#include <sstream>

using namespace std;

int main()
{
	string S, nS;
	getline(cin, S);
	stringstream sS(S);


	int c = 0;
	while(getline(sS, nS, ' '))
	{
		if (!nS.empty())
		{
			c++;
		}
	}

	cout << c;
}

na na na
3

✔ 2908번 상수

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s1, s2, ns1, ns2;
	cin >> s1 >> s2;
	for (int i = 0; i < s1.size(); i++)
	{
		ns1 += s1[s1.size() - i-1];
	}
	for (int i = 0; i < s2.size(); i++)
	{
		ns2 += s2[s2.size() - i-1];
	}

	string ns = (ns1 > ns2) ? ns1 : ns2;
	int a = stoi(ns);

	cout << a;
}

123 987
789

✔ 5622번 다이얼

이미지에 있는 다이얼에서
2: ABC 3: DEF 4: GHI 이렇게 숫자 하단에 표시되어있다
입력 받은 문자를 숫자에 체크해야한다

#include <iostream>

using namespace std;

int main()
{
	string s;
	cin >> s;

	int sum = 0;

	for (int i = 0; i < s.size(); i++)
	{
		switch (s[i])
		{
			case 'A':
			case 'B':
			case 'C':
				sum += 3;
				break;
			case 'D':
			case 'E':
			case 'F':
				sum += 4;
				break;
			case 'G':
			case 'H':
			case 'I':
				sum += 5;
				break;
			case 'J':
			case 'K':
			case 'L':
				sum += 6;
				break;
			case 'M':
			case 'N':
			case 'O':
				sum += 7;
				break;
			case 'P':
			case 'Q':
			case 'R':
			case 'S':
				sum += 8;
				break;
			case 'T':
			case 'U':
			case 'V':
				sum += 9;
				break;
			case 'W':
			case 'X':
			case 'Y':
			case 'Z':
				sum += 10;
				break;
		}
	}

	cout << sum;
}

UNUCIC
36

✔ 11718번 그대로 출력하기

#include <iostream>
#include <string>
#include <list>

using namespace std;
int main()
{
	list<string> slist;
	string s;

	while (!cin.eof())
	{
	 	getline(cin, s);
		slist.push_back(s);
	}
	int size = slist.size();
	for (int i = 0; i < size; i++)
	{
		cout << slist.front() << "\n";
		slist.pop_front();
	}
}

0개의 댓글

관련 채용 정보