본문 바로가기

c언어54

[c언어콘서트] 10장 14번 (철자 교정 프로그램) [10장 14번] 간단한 철자 교정 프로그램을 작성해보자. 문장의 끝에 마침표가 존재하는지를 검사한다. 역시 마침표가 없으면 넣어준다. 또한 문자열의 첫 번째 문자가 대문자인지를 검사한다. 만약 대문자가 아니면 대문자로 변환한다. 즉 입력된 문자열이 "pointer is easy"라면 "Pointer is easy."로 변환하여 화면에 출력한다. [풀이]#include #include #include int main() { char buffer[100]; int len; printf("텍스트를 입력하시오 : "); scanf("%[^\n]s", buffer); buffer[0] = toupper(buffer[0]); len = strlen(buffer); if (buffer[len - 1] != '.').. 2018. 10. 22.
[c언어콘서트] 10장 13번 (문자의 빈도 계산) [10장 13번] 사용자로부터 받은 문자열에서 각각의 문자가 나타나는 빈도를 계산하여 출력하는 프로그램을 작성하시오. [풀이]#include int main() { int i; char buffer[200]; char ascii[127] = { 0, }; printf("텍스트를 입력하시오 : "); scanf("%[^\n]s", buffer); for (i = 0; buffer[i]; i++) ascii[buffer[i]]++; for (i = 0; i < 26; i++) printf("%c : %d\n", 'a' + i, ascii['a' + i]); for (i = 0; i < 26; i++) printf("%c : %d\n", 'A' + i, ascii['A' + i]); return 0; } 2018. 10. 22.
[c언어콘서트]10장 12번 (문자열의 공백 삭제) [10장 12번] 문자열을 입력으로 받아서 문자열에 포함된 모든 공백 문자를 삭제하는 함수를 작성하고 테스트하라. [풀이]#include #include #include int main() { char buffer[20]; printf("텍스트를 입력하시오 : "); scanf("%[^\n]s", buffer); for (int i = 0; buffer[i]; i++) if (isspace(buffer[i])) strcpy(&buffer[i], &buffer[i + 1]); printf("공백이 제거된 문자열 : %s\n", buffer); return 0; } 2018. 10. 22.
[c언어콘서트]10장 11번 (문자를 아스키값으로 변환) [10장 11번] 사용자로부터 문자를 입력받아서 그 문자의 아스키 코드 값을 출력하는 프로그램을 작성하라. [풀이]#include #include int main() { char buffer; printf("문자 하나를 입력하시오 : "); scanf("%c", &buffer); printf("%c의 아스키코드 : %d\n", buffer, buffer); return 0; } 2018. 10. 22.
[c언어콘서트]10장 10번 (회문 검사) [10장 10번] 사용자로부터 받은 문자열이 회문인지를 점검하는 프로그램을 작성하라. [풀이]#include #include int main() { char buffer[200]; int len; int result = 1; printf("텍스트를 입력하시오 : "); scanf("%[^\n]s", buffer); len = strlen(buffer); for (int i = 0; i < len / 2; i++) if (buffer[i] != buffer[len - i - 1]) result = 0; if (result == 0) { printf("이 문자열은 회문이 아닙니다.\n"); } else { printf("이 문자열은 회문입니다.\n"); } return 0; } 2018. 10. 22.
[c언어 콘서트] 10장 9번 (문자열의 단어 세기) [10장 9번] 문자열 안의 단어들의 개수를 세는 프로그램을 작성해보자 [풀이]#include #include #include int main() { char buffer[200]; int cnt = 0; printf("텍스트를 입력하시오 : "); scanf("%[^\n]s", buffer); if (isalpha(buffer[0])) cnt++; for (int i = 0; i < strlen(buffer) - 2; i++) { if (isalpha(buffer[i]) == 0 && isalpha(buffer[i + 1]) != 0) cnt++; } printf("단어 개수 출력 : %d\n", cnt); return 0; } 2018. 10. 22.
[c언어 콘서트] 10장 8번 (대문자를 소문자로) [10장 8번] 사용자가 입력한 문자열에서 대문자를 소문자로 변경하는 프로그램을 작성해보자. [풀이]#include #include #include int main() { char buffer[200]; printf("텍스트를 입력하시오 : "); scanf("%[^\n]s", buffer); for (int i = 0; buffer[i]; i++) buffer[i] = tolower(buffer[i]); printf("소문자 출력 : %s\n", buffer); return 0; } 2018. 10. 22.
[c언어 콘서트] 10장 7번 (문자열을 거꾸로) [10장 7번] 사용자가 입력한 문자열을 거꾸로 하는 프로그램을 작성해보자. [풀이]#include #include int main() { char str[100]; char re_str[100]; int i, len; printf("문자열을 입력하시오 : "); scanf("%[^\n]s",str); len = strlen(str) - 1; for (i = 0; str[i]; i++) { re_str[i] = str[len]; len--; } re_str[i] = '\0'; printf("반대로 된 문자열 : %s \n", re_str); return 0; } 2018. 10. 11.
[c언어 콘서트] 10장 6번 (소문자를 대문자로 변환) [10장 6번] 사용자로부터 텍스트를 입력받아서 텍스트를 모두 대문자로 출력하는 프로그램을 작성해보자. 어떤 라이브러리 함수를 사용하여도 좋다. [hint] _ 소문자를 대문자로 변경해주는 toupper() 함수를 사용한다. [풀이]#include #include int main() { char str[100]; int i; printf("텍스트를 입력하시오 : "); scanf("%[^\n]s", str); for (i = 0; str[i]; i++) { str[i] = (char)toupper(str[i]); } printf("대문자 출력 : %s\n", str); return 0; } 2018. 10. 11.
[c언어 콘서트] 10장 5번 (모음 제거) [10장 5번] 텍스트 안의 모음을 전부 삭제하는 프로그램을 작성해본다. [풀이]#include #include int main() { char str[100]; int i, j; printf("텍스트를 입력한다 : "); scanf("%[^\n]s", str); for (i = 0; str[i]; i++) { if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u') { for (j = i; str[j]; j++) { str[j] = str[j + 1]; } } else if (str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i.. 2018. 10. 11.
[c언어 콘서트] 10장 4번 (공백 제거) [10장 4번] 텍스트 안에 포함된 과도한 공백을 없애는 프로그램을 작성해보자. [풀이]#include int main() { char str[100]; int i; printf("텍스트를 입력하시오 : "); scanf("%[^\n]s", str); for (i = 0; str[i]; i++) { if (str[i] == ' ' && str[i + 1] == ' ') { continue; } printf("%c", str[i]); } printf("\n"); return 0; } 2018. 10. 11.
[c언어 콘서트] 10장 3번 (문자반복 횟수 계산) [10장 3번] 문자열 안에 포함된 문자들의 출현 횟수를 계산하는 프로그램을 작성한다. 예를 들어, 문자열 "abc"라면 'a', 'b', 'c'문자가 한 번만 출현한다. [풀이]#include #include int main() { int i; char str[100]; char ascii[127] = { 0, }; printf("입력 문자열 : "); scanf("%s", str); for (i = 0; str[i]; i++) { ascii[str[i]]++; } for (i = 0; str[i]; i++) { if (ascii[str[i]] == 0) { continue; } else { printf("%c문자가 %d번 등장하였음!\n", str[i], ascii[str[i]]); ascii[str.. 2018. 10. 11.
[c언어 콘서트] 10장 1번 (암호 생성) [10장 1번] 사용자로부터 암호를 입력받는다. 사용자의 암호가 해킹에 대한 안전도가 강력한지를 검사한다. 만약 암호 안에 대문자, 소문자, 숫자가 모두 들어있으면 강력한 암호로 간주한다. 만약 사용자의 암호가 3가지 종류의 문자를 다 가지고 있지 않으면 프로그램은 보안을 위하여 더 강력한 암호를 고려하라고 제안한다. [풀이]#include int check(char *str, char *str_check); void set(char *str_check); int main() { char str[100]; char str_check[3] = { 0, }; do{ set(str_check); printf("암호를 생성하시오 : "); scanf("%s", str); } while (check(str, st.. 2018. 10. 11.
[c언어] scanf와 scanf_s의 차이 [scanf와 scanf_s의 차이] 기존에 사용하던 scanf함수는 지정된 버퍼의 크기보다 더 많은 양의 문자를 넣을수 있기 때문에 버퍼오버플로우에 대해서 많이 취약했다.이러한 부분을 보완하고자 만든 함수가 scanf_s이다. _ 즉, 보안을 위해서 보완한 함수이다. scanf와 scanf_s의 사용법은 거의 똑같지만, 문자와, 문자열을 입력받을 경우에 인자값으로 하나를 더 입력해 줘야한다. #include int main() { char arr[20]; scanf("%s",arr); } - scanf 함수는 arr 크기가 20일때 arr에 20이상의 문자를 넣을수 있다는 취약점(버퍼오버플로우)이 있었다. #include int main() { char arr[20]; scanf_s("%s",arr,s.. 2018. 10. 10.
[c언어] Visual Studio 콘솔창 유지 [visual stdio 콘솔창 유지] 첫번째 방법 _ 하위 시스템 변경 - 프로젝트명 우클릭후 속성에 들어간다. - 링커 _ 시스템에서 하위 시스템을 콘솔로 변경해주고 확인을 눌러준다. 두번째 방법 _ system("PAUSE"); 사용하기- 코드에 system("PAUSE");를 넣어준다. _ 보통 return 0;위에 쓴다. 2018. 10. 6.