반응형
문자열에서 특정 문자의 개수 세기
사용자로부터 문자열과 특정 문자를 입력받아, 해당 문자열에서 입력한 문자가 몇 번 등장하는지 계산하여 출력하는 프로그램을 작성하세요.
사용 개념:
문자열 처리 (char 배열)
반복문 (for)
조건문 (if)
표준 입출력 (scanf, printf)
풀이 방법
- 문자열 입력 받기
- fgets를 사용해 문자열을 입력받습니다. 이 함수는 한 줄의 문자열을 안전하게 읽을 수 있어, 초보자들이 사용하기에 적합합니다.
- 입력된 문자열에 포함된 개행 문자(\n)는 strcspn을 이용해 제거합니다.
- 찾을 문자 입력 받기
- scanf를 사용해 찾을 문자를 입력받습니다. 공백 문자를 무시하도록 %c 앞에 공백을 추가합니다.
- 문자열 탐색하기
- for 반복문을 사용해 문자열의 각 문자를 순회합니다.
- 문자열의 끝은 널 문자(\0)로 표시되므로, 반복문의 조건에 str[i] != '\0'를 사용합니다.
- 일치 여부 확인
- if 조건문을 이용해 문자열의 각 문자와 찾을 문자가 같은지 비교합니다.
- 같다면, 문자의 개수를 저장하는 변수 count를 증가시킵니다.
- 결과 출력
- 최종적으로 찾은 문자 개수를 printf를 사용해 출력합니다.
코드 예시
#include <stdio.h>
#include <string.h>
int main() {
char str[100]; // 문자열을 저장할 배열
char target; // 찾을 문자
int count = 0; // 문자 개수를 세는 변수
// 사용자로부터 문자열과 문자를 입력받기
printf("문자열을 입력하세요: ");
fgets(str, sizeof(str), stdin); // 문자열 입력
str[strcspn(str, "\n")] = '\0'; // 개행 문자 제거
printf("찾을 문자를 입력하세요: ");
scanf(" %c", &target); // 단일 문자 입력
// 문자열에서 해당 문자의 개수 세기
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == target) { // 입력된 문자와 비교
count++; // 일치하면 개수 증가
}
}
// 결과 출력
printf("입력된 문자열에서 '%c' 문자는 %d번 등장합니다.\n", target, count);
return 0;
}
코드 설명
1. 문자열 입력받기
int main() {
char str[100]; // 문자열을 저장할 배열
char target; // 찾을 문자
int count = 0; // 문자 개수를 세는 변수
fgets 함수는 문자열을 입력받는 함수로, 최대 길이를 설정해 버퍼 오버플로우를 방지합니다.
입력된 문자열에 포함된 개행 문자(\n)는 strcspn 함수로 제거합니다.
strcspn(str, "\n")은 문자열에서 첫 번째 개행 문자의 위치를 반환하며, 이를 사용해 널 문자(\0)로 대체합니다.
2. 찾을 문자 입력받기
// printf("찾을 문자를 입력하세요: ");
scanf(" %c", &target);
scanf(" %c", &target);
scanf로 단일 문자를 입력받습니다.
" %c"에서 앞의 공백은 입력 버퍼에 남아 있는 개행 문자를 무시하기 위한 것입니다.
3. 문자열 탐색
- for 반복문으로 문자열의 끝(\0)까지 순회합니다.
- if 조건문으로 현재 문자와 찾고자 하는 문자가 같은지 비교합니다.
- 일치할 경우, count 변수를 1씩 증가시킵니다.
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == target) {
count++;
}
}
for 반복문으로 문자열의 끝(널 문자 \0)까지 순회합니다.
if 조건문으로 현재 문자가 찾고자 하는 문자와 같은지 비교합니다.
일치할 경우, count 변수를 1씩 증가시킵니다.
4. 결과 출력
- 최종적으로 찾은 문자 개수를 출력합니다.
문자열을 입력하세요: programming is fun
찾을 문자를 입력하세요: g
입력된 문자열에서 'g' 문자는 2번 등장합니다.
반응형
'프로그래밍 > C' 카테고리의 다른 글
[C언어-응용문제] 배열에서 최댓값과 최솟값 찾기 (0) | 2024.11.23 |
---|---|
[C언어-응용문제] 동적 메모리 할당을 사용한 배열 평균 구하기 (0) | 2024.11.11 |
[C언어-응용문제] 파일에 텍스트 저장 및 읽기 (1) | 2024.11.10 |
[C언어-응용문제] 학생 점수 관리 프로그램 (구조체 문제) (1) | 2024.11.09 |
[C언어-응용문제] 숫자의 합 구하기(for, while) (1) | 2024.11.08 |