ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL 기초다지기 15 문자열2
    보관함 2020. 1. 3. 22:42

    프로그래밍에서 가장 기초적인 내용을 다루는 기초 다지기입니다.

    이번 포스팅은 기초 다지기 중 열다섯 번째인 문자열2 문제를 풀어보도록 하겠습니다.

     

    기초 내용인 만큼 다른 설명없이 문제와 코드만 간단하게 작성하도록 하겠습니다.


    602 : 문자열2 - 자가진단1

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string strArr[5];
    
    	for (int i = 4; i >= 0; --i)
    	{
    		cin >> strArr[i];
    	}
    
    	for (int i = 0; i < 5; ++i)
    	{
    		cout << strArr[i] << endl;
    	}
    }

     

    603 : 문자열2 - 자가진단2

     

    최근 C#만 하다보니 split하는 방법을 잊어버리고 있었는데 찾아보니 다음과 같이 sstream을 include해서 단어 단위로 나눌 수 있는 것 같습니다.

    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    int main()
    {
    	string str;
    
    	getline(cin, str);
    
    	string word;
    	int i = 1;
    	for (stringstream sts(str); sts >> word; ++i)
    	{
    		if (i % 2 == 1)
    		{
    			cout << word << endl;
    		}
    	}
    }

     

    604 : 문자열2 - 자가진단3

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string strArr[10];
    	char c;
    
    	for (int i = 0; i < 10; ++i)
    	{
    		cin >> strArr[i];
    	}
    	cin >> c;
    
    	for (int i = 0; i < 10; ++i)
    	{
    		if (strArr[i][strArr[i].size() - 1] == c)
    		{
    			cout << strArr[i] << endl;
    		}
    	}
    }

     

    605 : 문자열2 - 자가진단4

     

    C++에서 string을 사용하는 경우 의미가 없는 문제네요.

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str = "Hong Gil Dong";
    
    	cout << str << endl;
    }

     

    606 : 문자열2 - 자가진단5

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str;
    
    	cin >> str;
    	str.append("fighting");
    
    	cout << str << endl;
    }

     

    607 : 문자열2 - 자가진단6

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str1, str2;
    
    	cin >> str1 >> str2;
    
    	str2.replace(0, 2, str1.substr(0, 2), 0);
    	str2.append(str1.substr(0, 2));
    
    	cout << str2 << endl;
    }

     

    608 : 문자열2 - 자가진단7

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str;
    
    	cin >> str;
    
    	if (str.find('c') != -1)
    		cout << "Yes" << ' ';
    	else
    		cout << "No" << ' ';
    
    	if(str.find("ab") != -1)
    		cout << "Yes" << endl;
    	else
    		cout << "No" << endl;
    }

     

    609 : 문자열2 - 자가진단8

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str1, str2, str3;
    
    	cin >> str1 >> str2 >> str3;
    
    	if (str1 < str2)
    	{
    		if (str1 < str3)
    		{
    			cout << str1 << endl;
    		}
    		else
    		{
    			cout << str3 << endl;
    		}
    	}
    	else
    	{
    		if (str2 < str3)
    		{
    			cout << str2 << endl;
    		}
    		else
    		{
    			cout << str3 << endl;
    		}
    	}
    }

     

    610 : 문자열2 - 자가진단9

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string strArr[5];
    
    	for (int i = 0; i < 5; ++i)
    	{
    		cin >> strArr[i];
    	}
    
    	for (int i = 0; i < 5; ++i)
    	{
    		for (int j = 0; j < 5 - i - 1; ++j)
    		{
    			if (strArr[j] < strArr[j + 1])
    			{
    				swap(strArr[j], strArr[j + 1]);
    			}
    		}
    	}
    
    	for (int i = 0; i < 5; ++i)
    	{
    		cout << strArr[i] << endl;
    	}
    }

     

    611 : 문자열2 - 자가진단A

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str;
    
    	cin >> str;
    
    	int calcIndex;
    	char calc[5]{ '+', '-', '*', '/', '%' };
    	for (int i = 0; i < 5; ++i)
    	{
    		calcIndex = str.find(calc[i]);
    		if (calcIndex != -1)
    			break;
    	}
    	
    	cout.setf(ios::fixed);
    	cout.precision(2);
    
    	cout << stoi(str.substr(0, calcIndex)) * 2 << endl;
    	cout << stof(str.substr(0, calcIndex)) << endl;
    }

     

    612 : 문자열2 - 자가진단B

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str, temp;
    
    	for (int i = 0; i < 5; ++i)
    	{
    		cin >> temp;
    		str.append(temp);
    	}
    
    	for (int i = 0; i < str.size(); i += 3)
    	{
    		cout << str.substr(i, 3) << endl;
    	}
    }

     

    189 : 문자열2 - 형성평가1

     

    이번 문제는 바로 출력하는 게 아니라 뒤에서부터 출력해야 하기때문에 자료를 저장하기위한 list를 사용했습니다.

    #include <iostream>
    #include <string>
    #include <sstream>
    #include <list>
    
    using namespace std;
    
    int main()
    {
    	string str;
    
    	getline(cin, str);
    
    	list<string> listStr;
    	string word;
    	for (stringstream sts(str); sts >> word;)
    	{
    		listStr.push_back(word);
    	}
    
    	for (auto var = listStr.crbegin(); var != listStr.crend(); var++)
    	{
    		cout << *var << endl;
    	}
    }

     

    190 : 문자열2 - 형성평가2

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string strArr[5] = { "flower", "rose", "lily", "daffodil", "azalea" };
    
    	char c;
    
    	cin >> c;
    
    	int count = 0;
    	for (int i = 0; i < 5; ++i)
    	{
    		if (strArr[i].find(c, 1) == 1 || strArr[i].find(c, 1) == 2)
    		{
    			cout << strArr[i] << endl;
    			count++;
    		}
    	}
    	cout << count << endl;
    }

     

    191 : 문자열2 - 형성평가3

    #include <iostream>
    #include <string>
    #include <list>
    
    using namespace std;
    
    int main()
    {
    	list<string> listStr;
    
    	string temp;
    	while (true)
    	{
    		cin >> temp;
    		if (temp == "0")
    			break;
    
    		listStr.push_back(temp);
    	}
    	
    	cout << listStr.size() << endl;
    	int count = 1;
    	for (auto it = listStr.cbegin(); it != listStr.cend(); it++)
    	{
    		if (count++ % 2 == 0)
    			continue;
    
    		cout << *it << endl;
    	}
    }

     

    192 : 문자열2 - 형성평가4

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	int n;
    
    	cin >> n;
    
    	string* strArr = new string[n];
    
    	for (int i = 0; i < n; ++i)
    	{
    		cin >> strArr[i];
    	}
    
    	for (int i = 0; i < n; ++i)
    	{
    		for (int j = 0; j < n - i - 1; ++j)
    		{
    			if (strArr[j] > strArr[j + 1])
    				swap(strArr[j], strArr[j + 1]);
    		}
    	}
    
    	for (int i = 0; i < n; ++i)
    	{
    		cout << strArr[i] << endl;
    	}
    
    	delete[] strArr;
    }

     

    193 : 문자열2 - 형성평가5

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string strArr[5];
    
    	for (int i = 0; i < 5; ++i)
    	{
    		cin >> strArr[i];
    	}
    
    	char c;
    	string str;
    
    	cin >> c >> str;
    
    	bool isNone = true;
    	for (int i = 0; i < 5; ++i)
    	{
    		if (strArr[i].find(c) != -1 || strArr[i].find(str) != -1)
    		{
    			isNone = false;
    			cout << strArr[i] << endl;
    		}
    	}
    
    	if (isNone)
    		cout << "none" << endl;
    }

     

    194 : 문자열2 - 형성평가6

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string A, B;
    	int n;
    
    	cin >> A >> B >> n;
    
    	A.append(B);
    	B.replace(0, n, A.substr(0, n));
    
    	cout << A << endl;
    	cout << B << endl;
    }

     

    215 : 문자열2 - 형성평가7

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    bool IsNumber(char c);
    
    int main()
    {
    	string A, B;
    	
    	cin >> A >> B;
    
    	int numA = 0;
    	for (int i = 0; i < A.size(); ++i)
    	{
    		if (!IsNumber(A[i]))
    			numA = stoi(A.substr(0, i));
    	}
    	if (numA == 0)
    		numA = stoi(A);
    
    	int numB = 0;
    	for (int i = 0; i < B.size(); ++i)
    	{
    		if (!IsNumber(B[i]))
    			numB = stoi(B.substr(0, i));
    	}
    	if (numB == 0)
    		numB = stoi(B);
    
    	cout << numA * numB << endl;
    }
    
    bool IsNumber(char c)
    {
    	if (c < '0') return false;
    	if (c > '9') return false;
    	return true;
    }

     

    216 : 문자열2 - 형성평가8

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string str;
    
    	while (true)
    	{
    		cin >> str;
    		if (str.compare("END") == 0)
    			break;
    
    		for (auto c = str.crbegin(); c != str.crend(); c++)
    		{
    			cout << *c;
    		}
    		cout << endl;
    	}
    }

     

    237 : 문자열2 - 형성평가9

     

    이 부분에서는 고정소수점으로 3자리만 사용하기 위해 출력 스트림이 필요합니다.

    그런데 화면에 바로 출력하는 게 아닌 string으로 출력해야 하므로 stringstream을 사용하면 됩니다.

    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    int main()
    {
    	int n;
    	float f;
    
    	string str;
    
    	cin >> n >> f >> str;
    	stringstream sts;
    	sts.setf(ios::fixed);
    	sts.precision(3);
    	sts << n << f << str;
    	
    	string newStr{ sts.str() };
    
    	int strSize = newStr.size();
    	int firstLineSize = (strSize % 2 == 1) ? strSize / 2 + 1 : strSize / 2;
    	cout << newStr.substr(0, firstLineSize) << endl;
    	cout << newStr.substr(firstLineSize) << endl;
    }

     

    http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&sca=10f0

     

    JUNGOL | 문제은행 1 페이지

    경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호 TEL : 031-360-4144 FAX : 031-388-0996 E-mail : hancomc@hotmail.com, comkiwer@naver.com Copyrightⓒ 2010-2019 jungol. All right reserved. TOP

    www.jungol.co.kr

    댓글

Designed by Tistory.