/*문자열에 들어 있는 문자의 개수를 세는 일이 많을 것 입니다. 이를 수행하는 함수를 만들어 봅시다. */
#include <stdio.h>
int word_num(char *arr,int *n);//배열, 문자열 숫자
int main() {
int n;
char word[] = { "long sentence" };
printf("%s \n", word);
word_num(word, &n);
printf("문자열의 개수는:%d", n);
return 0;
}
int word_num(char* arr, int* n) {
for (int i = 0;; i++) {
if (arr[i] == 0) {
*n = i+1;
return 0;
}
}
}
/* char *str="abcdefghi" 과 char c_str[] = { "abcdefghi" };의 차이점 */
#include <stdio.h>
int main() {
char c_str[] = { "abcdefghi" };
const char* str = "abcdefghi";
printf("%s\n", str); /* 하면 잘 출력된다.*/
printf("%c\n", str[10]);
printf("%s\n", c_str);
printf("%c\n",c_str[10]);
return 0;
/*결국 두개의 차이점은 str은 계속해서 뒤에 \0이 오는데 반해
c_str은 마지막에만 \0을 넣고 사라진다.
즉 저렇게 포인터 형태로 만들어 버리면
배열의 크기가 자료형의 크기와 같아진다라고 나는 생각한다.
정답이 아닐수 있음*/
}
/* 두 개의 문자열을 비교하는 함수를 만들어서 같으면 1, 다르면 0 을 리턴하게 해보세요. (난이도 : 中)*/
#include<stdio.h>
int str_compare(char* arr1, char* arr2);
int main() {
char arr1[30];
char arr2[30];
printf("비교할 첫번째 문자열을 입력하시오");
scanf("%s", arr1);
printf("비교할 두번째 문자열을 입력하시오");
scanf("%s", arr2);
str_compare(arr1, arr2);
return 0;
}
int str_compare(char* arr1, char* arr2) {
for (int i = 0; i < 30; i++) {
if (arr1[i] == arr2[i]) {
continue;
}
else {
printf("같은 문자열이 아닙니다.\n ");
return 0;
}
}
printf("같은 문자열 입니다.\n");
return 0;
}
kbhit 함수와 getch함수 예제로 정리
#include<stdio.h>
#include<conio.h>
int main() {
int key;
int i = 0;
while (1) {
if (kbhit()) {
key = getch();
if(key==224||key==0)
{
key = getch();
switch (key) {
case 72:
printf("↑\n");
break;
case 75:
printf("←\n");
break;
case 77:
printf("→\n");
break;
case 80:
printf("↓\n");
break;
default:
break;
}
}
else {
if (key == 13)
printf("enter?");
else if (key >= 65 && key <= 90)
printf("영어 대문자 누름");
else if (key >= 97 && key <= 122)
printf("영어 소문자 누름");
else if (key >= 48 && key <= 57)
printf("숫자 키 누름");
else
printf("몰라요");
}
}
}
return 0;
}//
scanf함수에서 띄어쓰기 해결
#include <stdio.h>
int main() {
char str1[10], str2[10];
printf("문자열을 입력하세요 : ");
scanf("%[^\n]", str1);
printf("입력한 문자열 : %s \n", str1);
printf("문자열을 입력하세요 : ");
scanf(" %[^\n]", str2);//두번째 입력에는 %[^\n]앞에 띄어쓰기를 해준다
printf("입력한 문자열 : %s \n", str2);
//앞에 공백을 추가해주면 white space를
// 두 입력을 구분하는 구분자로 인식해서 그냥 넘어가지 않습니다.
return 0;
}//띄어쓰기는 위 처럼 할 수 있고
화면 출력함수 변환문자 제어문자
1. putc() [ int putc(int c, FILE *stream) ] in stdio.h
한 문자를 출력하는 함수
첫번째 인자 : 출력할 문자
두번째 인자 : 출력할 위치
2. putchar() [ int putchar (int character) ] in stdio.h
이 함수는 stdio헤더 파일에 매크로로 정의되어 있다.
#define putchar(c) putc((c),stdout)
putc함수를 표준출력으로만 이용할 수 있게 만든 것이 함수는 문자 c를 되돌주고(리턴), 에러가 발생하면 EOF(-1)을 리턴
3. puts() [ int puts(const char*s) ] in stdio.h
Put String, 문장 출력함수다. 컴퓨터의 특성상 문장에 변화를 주기 어렵기 때문에 문자상수를 인자로 갖는다. 인자에는 문장을 집어 넣어도 되고, 문장의 첫 부분을 가리키는 포인터나 배열이 사용되기도 한다.
puts는 자동으로 문장의 끝에 \n문자(개행문자)를 삽입해준다. 자동으로 줄바꿈이 이루어진다는 뜻이다
변환문자
%o / %O 8진수로 출력
%d 10진수로 출력
%x / %X 16진수로 출력
%u unsigned형식으로 출력
%i int형식으로 출력
%f float형식으로 출력
%lf double형식으로 출력
%e / %E 지수형식으로 출력
%s 문장으로 출력
%c 문자로 출력
%p 지정된 변수의 주소를 출력한다.
%(자연수)(영문자) 숫자만큼의 칸을 차지하여 출력한다.
%-(영문자) 왼쪽 정렬한다. ( 오른쪽 정렬이 기본형식이다. )
%+(영문자) 숫자 출력시에 쓰이며, 부호를 출력한다.
%.(자연수)(영문자) 실수 출력시에 쓰이며, 소수점 이하 (자연수)자리만큼 출력한다.
%0(영문자) 출력하고 남은 왼쪽칸을 0으로 채운다.
제어문자 (escape문자)
변환문자는 \ + (문자) 로 구성되어 있다.
\n 줄을 바꾼다( 개행문자 )
\r 줄의 처음으로 간다.
\b 커서를 왼쪽으로 한칸 옮긴다.
\a 비프음을 출력한다.
\t 탭을 출력한다.
/*문자열을 합치는 함수
이 함수는 문자열 두개를 받으면 그 두개를 이어서 출력하는 함수이다.
리턴은 제대로 했을때 1이 나오도록 만들어본다.
함수의 인자로는 문자열 2개를 포인터로 입력 받아야한다.
*/
#include<stdio.h>
int str_attach(char* str1, char* str2);
int main() {
char str1[100] = { "hello my name is:" };
char str2[100] = { "shin joung eun" };
if (str_attach(str1,str2) == 1)
printf("성공");
else printf("실패");
return 0;
}
str_attach(char* str1, char* str2) {
for (int i = 0; i < 100; i++) {
if (str1[i] == 0) {
for (int i2 = 0; i2 < 100; i2++) {
str1[i + i2] = str2[i2];
if (str2[i2] == 0) {
printf("%s", str1);
return 1;
}
}
}
}
}
슬슬 끝이 보인다. 라피신 합격을 위해서 이정도는 기초로 잡고 가야하니까 조금만 더 힘내자!! 아자아자
/*문자열을 복사하는 함수
주소값에 1을 더하면 다음 배열로 넘어가는 성질과 while문을 활용해서 풀어보자
어떤 함수:문자열 두개를 동일하게 만드는 함수 즉 문자열 두개를 받아서 첫번째 문자열이
더 길다고 조건을 걸고 두번째 문자열과 첫번째 문자열을 같게 만든다.
리턴형은 그냥 리턴 0을 하도록 하자.
인자로 무엇을 받는가?: char형 배열을 포인터로 2개 받는다.
*/
#include <stdio.h>
int copy_str(char* str1, char* str2);
int main() {
char str1[] = { "123456789012345678901234567890" };//30개의 문자열
char str2[30];
printf("문자를 입력하시오 (최대 길이는 30 입니다");
scanf("%s", str2);
printf("str1:%s\n", str1);
printf("str2:%s\n", str2);
copy_str(str1, str2);
printf("str1:%s\n",str1);
printf("str2:%s\n", str2);
return 0;
}
int copy_str(char* str1, char* str2) {
while (*str2) {
*str1 = *str2;
str1++;
str2++;
}
*str1 = '\0';
return 0;
}
/*문자열 내의 총 문자의 수를 세는 함수
함수가 하는일: 문자열을 받아서 이 문자열의 총 문자 숫자를 세는 것. 단
띄어쓰기랑 엔터는 숫자에 안 포함되도록 주의하자.
리턴값: 총문자의 숫자를 리턴해주자.
받아야하는 인자: char 형 문자열을 포인터로 받아야한다.
*/
#include<stdio.h>
int languege_num(char* str);
int main(){
char str[100] = {0};
int num;
printf("write the any word: ");
scanf("%[^\n]",str);
num = languege_num(str);
printf("문자열에서 문자의 숫자는%d", num);
return 0;
}
int languege_num(char* str) {
int num = 0;
while (*str) {
if (*str == ' ') {
str++;
continue;
}
str++;
num++;
}
return num;
}//호호 기분좋다
/*문자열을 비교하는 함수
함수가 하는일: 문자열의 길이가 같은지 문자열의 구성요소들이 하나하나 같은지를 비교하는 함수이다.
리턴값: 0을 리턴하고 함수에서 정답을 말한다.
인자: 문자열 두개를 인자로 받아야한다.
*/
#include <stdio.h>
int compare(char* str1, char* str2);
int main() {
int str1[] = {"hello word"};
int str2[] = { "hello" };
compare(str1, str2);
return 0;
}
int compare(char* str1, char* str2) {
while (*str1) {
if (*str1 == *str2) {
str1++;
str2++;
}
else {
printf("이 문자열은 같지 않습니다.");
return 0;
}
}
if (*str2 == 0) {
printf("이 문자열은 길이마저 똑같군요");
}
else {
printf("안타깝게도 길이는 다르군요");
}
return 0;
}
'초기 네이버 기록 > 과거 공부 기록' 카테고리의 다른 글
도서관리 프로그램 구조체 활용버전 씹어먹는 C언어 (2) | 2023.01.07 |
---|---|
도서관리 프로그램 최종본 (씹어먹는 C) (0) | 2023.01.07 |
다시 천천히 -씹어먹는 C언어 에라토스테네스의 체 예제 + 계산기 예제 (0) | 2023.01.07 |
배운것 기록 + 유클리드 호제법 문제 (씹어먹는 C언어) (2) | 2023.01.07 |
헷갈릴때 보기! 예제 포인터의 포인터 인자로 받는 함수 (0) | 2023.01.07 |