상세 컨텐츠

본문 제목

중간 연습

백준 연습

by 빙하둘리 2022. 8. 15. 17:02

본문

728x90

#include <iostream>
#include <string>
using namespace std;

int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
//char형 배열로 선언
//string으로 str을 선언해서 getline 쓰면 안되는가?
// https://rebro.kr/53참고
//string 클래스는 문자열의 끝에 '\0'이 안 들어가!
//그러니 일단 char 배열을 써보자
char str[100002]; //string str[100001]과 무슨 차이 str[100001] 하면 char str[길이][길이2] 이런거야?
//cin cin은 공백 이전까지의 문자열 입력을 받아서 getline 이용
fgets(str, 100002, stdin);
//fgets 함수는 개행 문자도 받아들이고
//from ibm) fgets 함수는 결과를 string에 저장하고 스트링 끝에 널 문자를 저장한다.
//그래서 두칸 더 필요

 // 널 터미네이터 쓰는 이유
// abc널 길이는 str.length()=3,
// 인덱스 0부터 str.length()-1까지 써지는데 마지막에
//문자열의 끝이라는 것을 알리기 위해서 널터미네이터를 붙일 필요가 있다!

//str[str.length()] = '\0'; 이건 범위 초과여서 말이 안된다.
int len = strlen(str);
int k = 1; // int k=1이 맞는 이유는?
//맨 끝에 공백이 있거나 글자만 쭉 들어오면 단어 하나로 처리 필요
//str.length() 알아보고 사용하기!
for (int i = 0; i < len; i++)
{
if ((str[i]==' ') && (str[i-1] != ' ')) //글자공백 순으로 찍히면 단어가 1개
k++;
// v글자v==>+1개
//글자v글자==>+1개
} // 공백이 두 번 이상 있는 경우는? 공백있다고 무조건 단어의 수가 늘어나는 것은 아니다.


if(str[len- 1] == ' ')
k--;


// 끝에 공백이 있는 것은 원상태 복구 해주기
cout << k;
return 0;
}

//fgets는 개행 문자 \n 추가
//근데 문자열의 끝을 나타내는 널 문자 넣을 공간 필요
//10만+2

/*
* test
* abcde끝 1 //얘 때문에 디폴트는 1로
*     끝은 0
*     a끝은 1
* ab cd끝은 2
* ab cd ef끝은 3
* 단어는 문자공백 or 공백문자가 오면 +1개 해줘야 된다.
* 48line 보니 공백 문자가 낫겠다.
* 그런데 공백 문자로 판별하면 저런


*/

//string str getline이 틀린 이유?

728x90

관련글 더보기

댓글 영역