#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
//char* strrchr(char* str1, char target) //strrchr : 문자열을 뒤에서 찾는 것.
//{
// char* firstchr = str1; // 첫글자를 저장한다.
//
// //if (*str1 == target) // 첫글자가 찾는 글자일때를 했는데 없어도 된다.
// //{ // 첫글자부터 반환을 해줘야 되는지 알았는데, 뒤에서 부터 찾는함수이므로 없어도 된다.
// // return str1; //str1 반환
// //}
//
// while (*str1 != '\\0') //str1이 NULL 값이 아닐경우
// {
// str1++; //str1 증감 -> str1 값의 끝까지 감.
// }
//
// if (*str1 == target) //마지막글자가 찾는 글자일 때,
// {
// return str1; //str1 값을 반환한다.
// }
//
// while (str1 != firstchr) // 위의 조건을 만족하지 않을 때 마지막부터 처음까지 반복
// {
// if (str1 == target) //찾는 글자일 경우
// {
// return str1; //str1 값을 반환한다.
// }
// str1--; //아닐 경우 str1 값을 1칸만큼 앞으로 옮긴다.
// }
//
// return NULL; //찾는글자가 없다면 NULL값을 반환한다.
//}
//
//int main()
//{
// char string[100] = "i love kimchi bro";
// char target = 'i';
//
// char* returnSave = strrchr(string, target);
// printf("%s", returnSave);
//}
/*
//문자열 맨 끝까지 간 후
int len = 0;
while (*str1 != '\\0')
{
++str1;
++len;
}
--str1;
//찾아가면 됨
for (int i = len - 1; i >= 0; ++i)
{
if (*str1 == targetchr)
{
return str1;
}
--str1;
}
return NULL;
*/
// myprintf(3, 1, 2, 3) -> My Variadic Function : 1, 2, 3
// "My Variadic Function : ~ "
//void/*(반환타입)*/myprintf(int count/*int타입의 값을 하나 받는다).*/, .../*(가변인자)*/)
//{
// va_list args;
// va_start(args, count);
//
// printf("My Varidic Function :");
// for (int i = 0; i < count; ++i)
// {
// int number = va_arg(args, int); //가변 인자로부터 int 타입의 데이터를 하나씩 가져온다.
// printf(" %d,", number);
// }
// va_end(args);
//}
//
//int main(void)
//{
// myprintf(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
//}
// <summary>
// printf와 유사하게 동작하나 기능이 제한됨.
// %d / %c / %f / %s
// </summary>
// <param name= "format">형식 문자열</param>
// <param name=">가변 인자값<param>
/*
void myprintf(const int );
int main(void)
{
my printf("Hello My Printf : %d %c %f %s", 10, 'A', 3.14f, "Hello");
// Output : Hello My Printf : 10 , A, 3.14000, Hello
return 0;
}
*/
void simple_printf(char* format, ...)
{
va_list args;
va_start(args, format);
char *word;
for (int i = 0; *format != '%'; ++i)
{
putchar(*format );
format++;
}
while (*format != '\\\\0')
{
if (*format == 'd')
{
int i = va_arg(args, int);
printf("10 ");
}
else if (*format == 'c')
{
int c = va_arg(args, int);
putchar((char)c);
}
else if (*format == 's')
{
for (word = va_arg(args, char*); *word; word++)
putchar(*word);
}
++format;
}
va_end(args);
}
int main(void)
{
simple_printf("Hello My Printf : %d, %c, %s",10,'A'," Hello");
return 0;
}