<Lab 07 문제 유형 요약>
- Program 1 : mystrlen() - strlen() 구현 (문자열 길이 구하는 함수)
- Program 2 : mystrcat() - strcat() 구현 (문자열 합치는 함수)
- Program 3 : delchar() 구현 (문자열에서 특정 문자를 삭제하는 함수)
- Program 4 : tolower(), toupper() (대문자 소문자 변환하는 함수)
- Program 5 : myatoi() - atoi() 구현 (문자열 정수로 변환하는 함수)
- Program 6 : myatoi(), 명령행 인자
- Program 7 : strlwr(), strpbrk(), strstr(), strchr()
- Program 8 : strtok(), 문장 문자열 자르기, 배열에 단어 저장
Program 1
한 행을 표준입력으로 입력 받은 문자열의 길이를 구하는 함수 mystrlen()을 구현하여 라이브러리 strlen()과 결과를 비교하는 프로그램을 작성하시오.
- int mystrlen(const char *p);
- 한 행을 표준입력으로 입력 받는 것은 라이브러리 gets() 사용
#include<stdio.h>
#include<string.h>
int mystrlen(const char* p)
{
int cnt = 0;
for (int i = 0; *(p + i); i++) {
cnt++;
}
return cnt;
}
int main()
{
char* string;
printf("Enter any string >> ");
gets(string);
printf("strlen() : %d\n", strlen(string));
printf("mystrlen() : %d\n", mystrlen(string));
return 0;
}
Program 2
앞의 문자열에 뒤 문자열을 연결하는 함수 mystrcat()를 구현하여 라이브러리 함수 strcat() 과 결과를 비교해 보시오.
- void mystrcat(char s1[], const char s2[]) : 라이브러리 strcat()와 같이 s1 뒤에 s2를 붙여 연결하는 함수
char s1[50] = "C ";
char s2[50] = "C ";
char *s3 = "programming language";
strcat(s1, s3);
mystrcat(s2, s3);
#include<stdio.h>
#include<string.h>
char* mystrcat(char* str1, char* str2)
{
int str1len = strlen(str1);
for (int i = 0; *(str2 + i); i++)
{
*(str1 + str1len + i) = *(str2 + i);
}
return str1;
}
int main()
{
char s1[50] = "C ";
char s2[50] = "C ";
char* s3 = "programming language";
printf("%s\n", s1);
printf("%s\n", s3);
printf("strcat() : %s\n", strcat(s1, s3));
printf("mystrcat() : %s\n", mystrcat(s2, s3));
return 0;
}
Program 3
표준입력으로 받은 문자열에서 특정 문자를 삭제하는 함수 delchar()를 구현하시오. 그리고 함수 delchar()를 호출하여 수행하고 결과를 출력하는 프로그램을 작성하시오.
- void delchar(char str[], const char ch) : str에서 문자 ch를 삭제한 문자열을 반영하는 함수
#include<stdio.h>
#include<string.h>
void delchar(char str[], const char ch)
{
for (int i = 0; *(str + i); i++)
{
if (*(str + i) == ch)
{
strcpy(str + i, str + i + 1);
i--;
}
}
}
int main()
{
char* string;
char del;
printf("input : ");
gets(string);
printf("delete : ");
scanf("%c", &del);
delchar(string, del);
printf("result : %s\n", string);
return 0;
}
Program 4
한 줄의 문자열을 표준입력으로 입력 받아 영문자의 대문자는 소문자로, 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하시오.
- 함수 tolower()와 toupper()를 이용
#include<stdio.h>
#include<ctype.h>
int main()
{
char* sentence;
printf("sentence : ");
gets(sentence);
for (int i = 0; *(sentence + i); i++)
{
if ('a' <= *(sentence + i) && *(sentence + i) <= 'z')
{
*(sentence + i) = toupper(*(sentence + i));
}
else if ('A' <= *(sentence + i) && *(sentence + i) <= 'Z')
{
*(sentence + i) = tolower(*(sentence + i));
}
}
printf("result : %s\n", sentence);
return 0;
}
Program 5
다음 내용을 참고로, 정수 형태의 문자열을 정수로 반환하는 함수를 구현하고 결과를 알아보는 프로그램을 작성하시오.
- 문자열 ”76843”은 정수 76843으로, 다음 두 함수에 대하여 모두 출력
- 라이브러리 함수 atoi()를 사용해 출력, 함수 atoi()의 함수원형은 stdlib.h에 정의되어 있으며 문자열 str을 정수로 변환하는 함수 int atoi(const char *str);
- 직접 구현한 함수 myatoi()도 동일하게 출력 int myatoi(const char *str);
- 다른 라이브러리 함수 사용 가능(isdigit, pow 등)
#include<stdio.h>
#include<stdlib.h>
int myatoi(const char* str)
{
int result = 0;
for (int i = 0; *(str + i); i++)
{
result = result * 10 + *(str + i) - '0';
}
return result;
}
int main()
{
char* intstr;
printf("integer : ");
gets(intstr);
printf("atoi() : %d\n", atoi(intstr));
printf("myatoi() : %d\n", myatoi(intstr));
return 0;
}
Program 6
5번 문제에서 직접 구현한 함수 myatoi()를 이용하여 명령행에 입력된 두 정수를 더한 결과를 출력하는 프로그램을 작성하시오.
- addcmdarg,c 파일을 컴파일하여 addcmdarg.exe 파일이 만들어서 dos창(cmd 명령어 사용) 에서 실행한 경우
- IDE(VisualStudio, Dev C++) 에서 인자를 입력하지 않은 경우
- IDE 에서 인자를 100 200을 입력한 경우
#include<stdio.h>
int myatoi(const char* str)
{
int result = 0;
for (int i = 0; *(str + i); i++)
{
result = result * 10 + *(str + i) - '0';
}
return result;
}
int main(int argc, char* argv[])
{
printf("result : %s + %s = %d\n", argv[1], argv[2], myatoi(argv[1]) + myatoi(argv[2]));
return 0;
}
Program 7
다음에서 설명하고 있는 함수의 기능을 이해하기 위하여 각각 함수의 사용하는 예제를 프로그램하시오.
- strlwr() : 문자열 str을 모두 소문자로 변환하고 변환한 문자열을 반환
- strpbrk() : 앞의 문자열 str에서 뒤 문자열 charset에 포함된 문자가 나타나는 처음 위치를 찾아 그 주소 값을 반환하며, 만일 찾지 못하면 null 포인터를 반환
- strstr() : 앞의 문자열 str에서 뒤 문자열 strsearch이 나타나는 처음 위치를 찾아 그 주소 값을 반환, 만일 찾지 못하면 NULL 포인터를 반환
- strchr() : 앞의 문자열 str에서 뒤 문자 ch가 나타나는 처음 위치를 찾아 그 주소 값을 반환, 만일 찾지 못하면 NULL 포인터를 반환
char str[] = "C Code & C++ code" ;
char str1[20];
char str2[] = "&+" ;
char str3[] = "code" ;
char ch = 'd';
#include<stdio.h>
#include<string.h>
int main()
{
char str1[20] = "C Code & C++ code";
char str2[] = "&+";
char str3[] = "code";
char ch = 'd';
printf("strlwr(str1) : %s\n", strlwr(str1));
printf("strpbrk(str1, str2) : %s\n", strpbrk(str1, str2));
printf("strstr(str1, str3) : %s\n", strstr(str1, str3));
printf("strchr(str1, ch) : %s\n", strchr(str1, ch));
return 0;
}
Program 8
주어진 문장으로부터 단어를 추출하여 배열에 저장하고, 배열에 저장된 단어를 출력하는 프로그램을 쓰시오.
- strtok() 함수 사용하면 편리
- char str[] = "C and C++ languages are good!, Java and python languages are best?";
#include<stdio.h>
#include<string.h>
int main()
{
char str[] = "C and C++ languages are good!, Java and python languages are the best?";
char* p = strtok(str, " ");
while (p)
{
printf("%s\n", p);
p = strtok(NULL, " ");
}
return 0;
}
'College Computer Science > C Language' 카테고리의 다른 글
[C 프로그래밍 실습] 변수 유효범위 (Lab 08) (0) | 2021.01.03 |
---|---|
[C 프로그래밍 실습] 중간고사 문제 (0) | 2021.01.03 |
[C 프로그래밍 실습] 함수 2 (Lab 06) (0) | 2021.01.02 |
[C 프로그래밍 실습] Report 02 (0) | 2021.01.02 |
[C 프로그래밍 실습] 함수 1 (Lab 05) (0) | 2020.11.21 |
댓글