#include <unistd.h>
char *ft_space_first(char *str)
{
int i;
i = 0;
if (str[0] >= 'a' && str[0] <= 'z')
{
str[0] = str[0] - 32;
}
while (str[i] != '\\0')
{
if (str[i-1] == ' ')
{
if (str[i] >= 'a' && str[i] <= 'z')
{
str[i] = str[i] - 32;
}
}
i++;
}
return str;
}
char *ft_strcapitalize(char *str)
{
int i;
i = 0;
ft_space_first(str);
while (str[i] != '\\0')
{
if (str[i] > 32 && str[i] < 127)
if (!(str[i] >= '0' && str[i] <= '9'))
if (!(str[i] >= 'a' && str[i] <= 'z') && !(str[i] >= 'A' && str[i] <= 'Z'))
if (str[i+1] >= 'a' && str[i+1] <= 'z')
{
str[i+1] = str[i+1] - 32;
}
i++;
}
return str;
}
int main() {
char arr[] = "salut, comment tu vas ? 42mots quarante-deux; cinquante+et+un";
ft_strcapitalize(arr);
printf("%s", arr);
return 0;
}
//norminette 때문에 수정한 코드
#include <unistd.h>
char *ft_space_first(char *str)
{
int i;
i = 0;
if (str[0] >= 'a' && str[0] <= 'z')
str[0] = str[0] - 32;
while (str[i] != '\\0')
{
if (str[i - 1] == ' ')
{
if (str[i] >= 'a' && str[i] <= 'z')
{
str[i] = str[i] - 32;
}
}
i++;
}
return (str);
}
char *ft_strcapitalize(char *str)
{
int i;
i = 0;
ft_space_first(str);
while (str[i] != '\\0')
{
if (str[i] > 32 && str[i] < 127)
{
if (!(str[i] > 47 && str[i] < 57))
{
if (!(str[i] >= 'a' && str[i] <= 'z'))
{
if (!(str[i] >= 'A' && str[i] <= 'Z'))
{
if (str[i + 1] >= 'a' && str[i + 1] <= 'z')
str[i + 1] = str[i + 1] - 32;
}
}
}
}
i++;
}
return (str);
}
#include <stdio.h>
int main(void)
{
char a[] = "salut, comment tu vas ? 42mots quarante-deux; cinquante+et+un";
printf("%s", ft_strcapitalize(a));
}
수정 사항: 문장 중간에 대문자가 갑자기 나오는 부분에서는 문자 변환이 이루어지지 않는다.
수정한 코드: ft_upp_to_low()이란 함수를 통해 우선 전체적으로 문장의 알파벳을 소문자로 만들어준다.
#include <unistd.h>
char *ft_low_to_upp(char *str)
{
int i;
i = 0;
while (str[i] != '\\0')
{
if ('A' <= str[i] && str[i] <= 'Z')
{
str[i] = str[i] + 32;
}
i++;
}
return (str);
}
char *ft_space_first(char *str)
{
int i;
i = 0;
if (str[0] >= 'a' && str[0] <= 'z')
str[0] = str[0] - 32;
while (str[i] != '\\0')
{
if (str[i - 1] == ' ')
{
if (str[i] >= 'a' && str[i] <= 'z')
{
str[i] = str[i] - 32;
}
}
i++;
}
return (str);
}
char *ft_strcapitalize(char *str)
{
int i;
i = 0;
ft_low_to_upp(str);
ft_space_first(str);
while (str[i] != '\\0')
{
if (str[i] > 32 && str[i] < 127)
{
if (!(str[i] >= '0' && str[i] <= '9'))
{
if (!(str[i] >= 'a' && str[i] <= 'z'))
{
if (!(str[i] >= 'A' && str[i] <= 'Z'))
{
if (str[i + 1] >= 'a' && str[i + 1] <= 'z')
str[i + 1] = str[i + 1] - 32;
}
}
}
}
i++;
}
return (str);
}
이상하게 다른 평가자분들은 논리적인 면에서 맞다고 하시는데 기계채점에서 KO가 떠버렸다.
왜인지는 이유를 아직 모르겠지만, 잘못적은 함수명을 수정했다.
그리고 혹시 몰라 int i의 값의 기본 값을 1로 수정했다.
#include <unistd.h>
char *ft_upp_to_low(char *str)
{
int i;
i = 0;
while (str[i] != '\\0')
{
if ('A' <= str[i] && str[i] <= 'Z')
{
str[i] = str[i] + 32;
}
i++;
}
return (str);
}
char *ft_space_first(char *str)
{
int i;
i = 1;
if (str[0] >= 'a' && str[0] <= 'z')
str[0] = str[0] - 32;
while (str[i] != '\\0')
{
if (str[i - 1] == ' ')
{
if (str[i] >= 'a' && str[i] <= 'z')
{
str[i] = str[i] - 32;
}
}
i++;
}
return (str);
}
char *ft_strcapitalize(char *str)
{
int i;
i = 1;
ft_upp_to_low(str);
ft_space_first(str);
while (str[i] != '\\0')
{
if (str[i - 1] > 32 && str[i - 1] < 127)
{
if (!(str[i - 1] >= '0' && str[i - 1] <= '9'))
{
if (!(str[i - 1] >= 'a' && str[i - 1] <= 'z'))
{
if (!(str[i - 1] >= 'A' && str[i - 1] <= 'Z'))
{
if (str[i] >= 'a' && str[i] <= 'z')
str[i] = str[i] - 32;
}
}
}
}
i++;
}
return (str);
}
// c02 test code - made by kyungjle
#include <stdio.h>
char *ft_strcapitalize(char *str);
int main(void)
{
char str[] = "salut, comment tu vas ? 42mots quarante-deux; cinquante+et+un";
printf("%s\\n", str);
printf("===========\\n");
printf("%s\\n", ft_strcapitalize(str));
}
예외 사항 발견 : tab이나 \n 등 비출력 문자가 앞에 오면 소문자가 대문자로 바뀌지 않는 현상 존재.
예외 사항을 반영한 코드
#include <unistd.h>
char *ft_upp_to_low(char *str)
{
int i;
i = 0;
while (str[i] != '\\0')
{
if ('A' <= str[i] && str[i] <= 'Z')
{
str[i] = str[i] + 32;
}
i++;
}
return (str);
}
char *ft_space_first(char *str)
{
int i;
i = 1;
if (str[0] >= 'a' && str[0] <= 'z')
str[0] = str[0] - 32;
return (str);
}
char *ft_strcapitalize(char *str)
{
int i;
i = 1;
ft_upp_to_low(str);
ft_space_first(str);
while (str[i] != '\\0')
{
if (str[i - 1] > 0 && str[i - 1] < 127)
{
if (!('0' <= str[i - 1] && str[i - 1] <= '9'))
{
if (!('a' <= str[i - 1] && str[i - 1] <= 'z'))
{
if (!('A' <= str[i - 1] && str[i - 1] <= 'Z'))
{
if (str[i] >= 'a' && str[i] <= 'z')
str[i] = str[i] - 32;
}
}
}
}
i++;
}
return (str);
}
// c02 test code - made by kyungjle
#include <stdio.h>
//char *ft_strcapitalize(char *str);
int main(void)
{
char str[] = "salut, comment tu vas ? 42Mots quarante-deux; cinquante+et+un";
printf("%s\\n", str);
printf("===========\\n");
printf("%s\\n", ft_strcapitalize(str));
}