#include <string.h>// strlen 함수로 문자열 길이를 구하기 위해 가져왔습니다.
int main() {
char arr1[6] = {1,5,6,7,8}; // 문자열은 꼭 +1 마지막에/0 값이 있어요
char arr2[5] = {3,4,5,6}; // 마찬가지
int len1 = strlen(arr1); // 위 배열의 길이 5;
int len2 = strlen(arr2); // 위 배열의 길이 4
// 여기는 이제 역순으로 출력할거에요 알아야할게 5번까지의 배열을 0-4,1-3 이런식으로 바꾸어서 4,3,2,1,0번 으로 바꿀수 있게 해줄거에요
for (int i = 0; i < len1/2; i++) { // 가운데 조건을 1/2로 한 이유는 예를들어 len1이 5일경우 5/2는 2이므로 0부터 2까지 반복하죠?(아래로)
int tmp = arr1[i]; // 변수 tmp에 값을 저장해주지 않으면 바꿀수없습니다.
arr1[i] = arr1[len1 - i - 1]; // arr1[i] = arr1[len1 - i - 1] i가 0일때 arr1[0] = arr1[5-0-1] 즉 arr1[0]번값에 arr1[4]를 대입하라는 의미입니다.
arr1[len1 - i - 1] = tmp; // 그러면 여기는 arr1[4]에 위에 저장한 tmp=arr1[0] 값이니까 arr1[4]=arr1[0] 잘 바꿧씁니다.,,하하
}
//여기는 arr2의 역순 구하기
for (int i = 0; i < len2 / 2; i++) {
int tmp = arr2[i];
arr2[i] = arr2[len2 - i - 1];
arr2[len2 - i - 1] = tmp;
}
// 잘 되었는지 확인해볼게요
for (int i = 0; i < len1; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
for (int i = 0; i < len2; i++) {
printf("%d ", arr2[i]);
}
}
#include<stdio.h>
#include<string.h> //strlen 함수 이용해서 입력받은 문자열 길이를 알아낼거에요
int main(){
//----------------------------------------------------------------------------------------//
int arr[26]; //알파벳 소문자는 26글자니까 -1,-1,1,2,3... 형식으로 저장될 정수형 배열
char alp[27] ={NULL}; //사실 {a,b,c....} 이런 식으로 초기화 해주어도 괜찮지만
// 밑에 처럼 for문으로 깔끔하게 나타내고 싶었습니다..(더럽다면.. 죄송합니다)
// 27인 이유는 문자열은 마지막에 널값이 있어서 꼭 하나 더 추가해주어야합니다 오류남
char input[101]; // 최대 문장의 길이는 100이지만 위와 같은이유로 +1 해서 101
//----------------------------------------------------------------------------------------//
//배열 -1 대입하기//
for (int i = 0; i < 26; i++) { // 정수형 배열에 없는 값은 -1로 표현하기로했으니
arr[i] = -1; // 26칸에 -1을 넣어줍니다.
}
//----------------------------------------------------------------------------------------//
// 문자열에 알파벳 저장하기//
for(int i=97;i<=122;i++){ // 아스키코드 97~122번은 a~z입니다
alp[i-97]=i; //i=97 일때 alp[0]=97, alp[1]=98.. 이런느낌으로 반복저장합니다.
}
//----------------------------------------------------------------------------------------//
//문자열 입력받기//
scanf("%s",input); // 이건 쉽죠..?
//----------------------------------------------------------------------------------------//
//*입력받은 문자열에서 중복값 제거 apple -> ap0le 이런느낌*//
for (int i = 0; i < strlen(input); i++) {
for (int j = i+1; j < strlen(input); j++) {
// 두번째 for문에서 초기값을 i+1로 해두어서 비교할 문자열의 다음 문자부터 비교를해줍니다//
// 이렇게 하지않으면 자기 자신도 비교하고 중복값으로 판단해 a00le 이렇게 나와요..//
if (input[i] == input[j])
input[j] = '0';
}
}
//printf("%s",input); -> ap0le 이렇게 출력됩니다//
//----------------------------------------------------------------------------------------//
// 이제 정수형 배열에 값 저장하기//
for (int i = 0; i < strlen(input); i++) { //중복값을 제거한 입력값을
for (int j = 0; j < 26; j++) { // 하나하나 알파벳 전부랑 비교합니다
if (input[i] == alp[j]) { // 만약 비교하는 값이 알파벳 순서대로 저장한 배열과 일치하면
arr[j] = i; //알파벳 배열의 위치와 동일하게 정수형배열 arr에 저장해줍니다.
}
}
}
//----------------------------------------------------------------------------------------//
for (int i = 0; i < 26; i++) {
printf("%d ", arr[i]); //출력해주면 끝이에요... %d 뒤에 공백..신경쓰기
}
}
time_t 형태의 변수 t를 struct tm 구조체 값으로 변환하고localtime 함수는 구조체 포인터 값을 반환하기 떄문에struct tm tm =*localtime(&t)형태로 선언합니다.
struct tm {
int tm_sec; // 초
int tm_min; // 분
int tm_hour; // 시
int tm_mday; // 일
int tm_mon; // 월
int tm_year; // 년 ※1900년 부터의 년입니다.
int tm_wday; // 요일
int tm_yday; // 1년중 경과일 0~365
int tm_isdst; //
};
struct 구조체의 내용은 다음과 같습니다
예제 입력후에 결과값 받아보겠습니다
1. 년 월 일 시 분 초 입력받기
여기서 년은 +1900
월은 +1해야 현재 시간을 받아볼수있습니다.
이유는 년도는 1900년 이후 시간을 표시해주고
월은 구조체 안에 -1값으로 저장되어있기때문에
이점만 유의해서 출력하면됩니다!
#include<stdio.h>
#include<time.h>
int main() {
time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("%d %d %d %d %d %d", tm.tm_year + 1900, // 년도 1900년 이후 +1900
,tm.tm_mon +1 // 월은 -1값 임으로 +1
, tm.tm_mday // 일
, tm.tm_hour // 시간
, tm.tm_min // 분
, tm.tm_sec ); // 초
}
코드는 가독성을 위해 이렇게 작성하였습니다
(이렇게 하면 오류납니다,,)
2022년 11월 12일 15시 42분 44초 잘 출력되는걸 확인해볼수있습니다.
갑자기 든생각인데 시간을 AM PM형식으로 출력하려면
어떤식으로해야할까요
#include<stdio.h>
#include<time.h>
int main() {
time_t t = time(NULL);
struct tm tm = *localtime(&t);
char pm[3] = "PM"; // 오후
char am[3] = "AM"; // 오전
int n = 0; //16시를 4시로 바꾸고 저장해줄 변수 n 선언
if (13 <= tm.tm_hour && tm.tm_hour <= 23) { //13시 보다 크거나 23시보다 작을때
n= tm.tm_hour - 12; //12를 빼주어야 1시~11시까지로 나타낼수있겠죠?
}
if (13 <= tm.tm_hour && tm.tm_hour <= 23) { // 오후는 13시부터 23시까지 잡았습니다
printf("%s %d",pm,n);
}
else {
printf("%s %d",am,n); // 아니라면 오전으로 출력
}
}