npos

npos : size_type 으로 정의된 특수값
-1 값으로 정의

static const size_type npos = -1;  

string :: npos는 -1 값을 가지는 상수
find() 함수에 의해서 found 되지 못하는 경우 npos값이 리턴

  • find() 함수 return value
    Position of the first character of the found substring or npos if no such substring is found.

1. find() 함수

주어진 문자열 순서와 동일한 첫 번째 부분 문자열을 찾는 함수
Finds the first substring equal to the given character sequence.

2. find() return value

찾은 부분 문자열의 첫 문자 위치 또는 해당 부분 문자열이없는 경우 npos를 return
Position of the first character of the found substring or npos if no such substring is found.

std::string str = "Hello String_World!";

std::string::size_type found;
found = str.find("S"); 
printf("%d\n", found); //6
found = str.find("World"); 
printf("%d\n", found); //13


std::string::size_type not_found;
not_found = str.find("bye");
if(not_found == std::string::npos)
{
	printf("not found\n"); //not found
}

Output:
6
13
not found

c++문제풀이

문제

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code “alphanumeric” 문자만 들어있다.

QR Code “alphanumeric” 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$%*+-./: 이다.

입력

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.

출력

각 테스트 케이스에 대해 P를 출력한다.

string으로 문제풀이하는것보다 char로 문제풀이하는 것을 권장
string type comsume more memory over char
string is an object wheras char is a primitive type

  • char 활용 문제풀이
#include<cstdio>
int main()
{
	int tc;
	scanf("%d", &tc);
	
	int count;
	char str[21];	
	for(int i = 0; i<tc; i++)
	{
        scanf("%d %s", &count, str); 
        for(int j = 0 ; str[j]; ++j)  //point1
            for(int k = 0; k <count; ++k)
                printf("%c", str[j]);
        printf("\n");
    }    
	return 0;
}

point1 : str[j] 가 0 이되는 순간은 문자열의 마지막 index 임을 의미

  • string 활용 문제풀이
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;

int main()
{
	int tc;
	scanf("%d", &tc);
	
	string str;
	for(int i = 0; i < tc; ++i)
	{
		int r;
		scanf("%d", &r); 
		
		getchar(); //clear the buffer
		getline(cin, str);
		
		for(int j = 0; j < str.size(); ++j)
		{
			for(int k = 0 ; k < r; ++k)
			{
				printf("%c", str[j]);
			}
		}
		printf("\n");
	}
	return 0;
}