U E D R , A S I H C RSS

새싹교실/2015/의사양반/0508

Difference between r1.15 and the current

@@ -326,9 +326,10 @@
if(*str==' ')
{
cnt++;
*(str+cnt)==*str;
*(str+cnt)=*str;
}
}
*(str+cnt)=*str;
}
}}}
* rtrim : 문자열이 다나온 뒤의 공백을 없애고 NULL을 앞으로 땡김




1. 참여자 명단


의사 장용운 11학번 취침출석
환자 천준현 15학번 출석
최지혁 출석
박인서 의사처럼 자다왔는데 어쩌다보니 출석

2. 수업

2.1. 진행

1. 장소 : 6층 학회실
2. 시간 : 15시 16시 ~ 17시 2시간 같은 1시간이 되어버렸다.

2.2. 내용

12강. 문자열
  • 문자열이란?
  • 문자열의 선언
  • 문자열 함수

3. 코드

3.1. 예제1


4. 숙제

1. 이 페이지에 후기 작성하기!
2. 오늘 공부한 개념 수업 페이지에 정리하기!
3. 문자열 함수 trim을 조사하고 짜오기

5. 후기

  • 후기 작성 요령 : 후기는 F4(ThreeFs + Future Action Plan)에 맞게 작성해주세요.
    • Facts, Feelings, Findings, Future Action Plan. 즉, 사실, 느낀 점, 깨달은 점, 앞으로의 계획.

  • 뭔가 내용을 받아들인다기보다 그냥 점점 머리가 아파지는 기분이에요. 더 열심히 해야하는데 하.... - 천준현
  • 살려주세요, 레알. - 최지혁
  • 이 정도면 쉬어가는 타임인가 2시간 같은 1시간 이었지만 전 시간에 비하면 쉬어가는 타임이네요.. 음 역시 포인터는 어려웠군요.. 이전까지의 내용을 복습하는데에 중점을 두고 복습하겠습니다. - 박인서



6. 숙제 제출

6.1. 천준현


문자열(string)

char* str = "cream";
*str 은 c
*(str+i) 로 
문자열 마지막엔 무조건 null 문자, 공간을 무조건 하나 더 차지함..

char c = '\0'
널문자

%s
null문자를 만날때까지 출력

char str[10];
str[0] = 'c'
    1  = 'h'
    2  = 'o'
    3  = 'o'
    4  = '\0'


#include <stdio.h>
#pragma warning (disable : 4996)
#include <malloc.h>

int strlen(char*s){    //길이 재기
		int res = 0;
		for (; *s != '\0'; s++) res++;
		return res;
	}

int strcmp(char *s, char *d){   //일치비교
	for (; *s != '\0'; s++, d++)
		if (*s != *d) return 0;
	if (*d == '\0') return 1;
	return 0;
}

void strtoupper(char *str){     // 소문자를 대문자로       " ", ' ' 는 쓸 수 없다. 대입을 할 수 없기 때문
	for (; *str != '\0'; str++)
		if (*str >= 'a' && *str <= 'z')
			*str += 'A' - 'a';

}

int strcpy(char *d, char *s){   //내용 복사      destination = 복사될 장소 source = 복사할 원본
	for (; *s != '\0'; s++, d++){
		*d = *s;
	}
	*d = '\0';
}

char* strdup(char *s){	//문자열 생성+복사
	int len = strlen(s);
	char *res = (char*)malloc(sizeof(char)*(len + 1));
	for (int i = 0; i <= len; i++)
		res[i] = s[i];
	return res;
}

void strcat(char *d, char *s){ //연결 concatenation     제약 : d는 수정 가능, d 커야돼
	for (; *d != '\0'; d++);
	for (; *s != '\0'; s++, d++)
		*s = *s;
	*d = '\0';
}

int strstr(char *s, char *p){  //매칭, 두 개 해서 안에 들어있나 없나
	int s_len, p_len;
	p_len = strlen(p);
	s_len = strlen(s); 
	for (int i = 0; i < (s_len - p_len); i++)
		if (s[i] == p[0]){
			int k;
			for (k = i; k < p_len; k++)
				if (s[i + k] != p[k]) break;
			if (k == p_len) return i;
		}
	return -1;
}

6.2. 최지혁

 *문자열 = 문자 배열 
[c] [r] [e] [a] [m]
ex) char* str = "cream"

*str = c
*(str + 1 ) = r
*(str + 2 ) = e
...

 *직접 문자열 만들기
char str[10];
str [0] = 'c'
     1
...
str[n] = \0 넣어야!
(안넣으면 무한 루프)

 *char c = '\0' -> 널 문자(문자끝)

printf("%s","cream\n" )
-> cream\n\0이 되서 \0 나올때까지 출력
(\n,\0는 한 문자로 인식)



#pragma warning (disable:4996)
#include<malloc.h>
int strlen(char*s) //길이
{
	int res = 0;
	for (; *s != '\0'; s++, res++)
		return res;
}

int strcmp(char*s, char*d) //일치비교
{
	for (;*s != '\0'; s++, d++)
		if(*s != *d)return 0;
	if (*d == '\0') return 1;
	return 0;
}

void strtoupper(char*str) // ""로 한 건 여기에 넣을 수 없다. ""는 다른데도 쓰일까봐 상수로 처리되서 변경 x. 대신 ''로 하나하나 넣은건 넣을 수 있다.
{
	for (; *str != '\0'; str++)
	{
		if (*str >= 'Q' && *str <= 'z')
			*str == 'A' - 'a';
	}
}

int strtolower(char*str)
{
        for( ;*str!='\0' ; str ++ )
        {
                if(*str >= 'Q' && *str <= 'z')
                        *str == 'a' - 'A';
        }
}

}

int strcpy(char*d ,char*s) //문자열 내용 복사   d는 복사될 장소, source는 복사할 원본
{
	for (; *s != '\0'; s++, d++)
	{
		*d = *s;
	}
	*d = '\0';
}

char* strdup(char*s) //문자열 생성+복사
{
	int len = strlen(s); //문자 몇 갠지 세기
	char *res = (char*)malloc(sizeof(char)*(len + 1));
	for (int i = 0; i <= len; i++)
		res[i] = s[i];
	return res;
}

void strcat(char*d, char*s) // 하나를 다른 하나의 뒤에 연결하기. d는 수정가능, 직접 메모리할당하든 함수로 하든 한땀한땀 넣은거만 d에 넣을 수 있음, d는 충분히 커야함 
{
	for (; *d != '\0'; d++); //문자열 끝까지 주소 이동
	for (; *s != '\0'; s++, d++)
		*d = *s;
	*d = '\0';
}

int strstr(char*s, char*p) //p는 패턴 한 문자열 안에 다른 문자열 있나 확인
{
	int s_len,p_len;
	p_len = strlen(p);
	s_len = strlen(s);
	for (int i = 0; i < s_len - p_len /*이거 없음 i 더 커져서 다른 곳 침범*/; i++)
	{
		if (s[i] == p[0]) //다른 문자열에서 같은 첫글자 발견시
		{
			int k;
			for (k = 0; k < p_len; k++) //중간에 문자가 달라 if에 걸려 나오지 않으면 맞는거
				if (s[i + k] != p[k]) break;
			if (k == p_len) return i; //다 맞으면 i(시작할 위치)에 리턴, 틀리면 break로 다시 for 돌기
			
		}
		return -1; 	}
}

6.3. 박인서

  • 문자열 : 문자 배열->문자를 여러개 저장
    • 선언 : char * str;(기존의 포인터 배열처럼 *(str+i)로 지정 가능) 혹은 char str하는 문자열의 문자 갯수;
    • 문자열의 끝을 NULL='\0'(아스키코드값 0)로 지정->원하는 문자열 길이+1
    • %s로 출력, 쌍따옴표("")는 마지막에 알아서 NULL문자를 넣어줌.
  • 문자열 함수
    • strlen : 문자열의 길이을 return

int strlen(char * s)
{
	int res=0;
	for(;*s!='\0';s++) res++;
	return res;
}
  • strcmp : 문자열 2개를 비교하여 같으면 1을 return, 다르면 0을 return

int strcmp(char * s, char * d)
{
	for(;*s!='\0';s++,d++) if(*s!=*d) return 0;
	if(*d=='\0') return 1;
	return 0;
}
  • strtoupper : 소문자를 대문자로 모두 변경(직접 대입한 문자(열)를 바꾸기 못함)

void strtoupper(char * str)
{
	for(;*str!='\0';str++) if(*str>='a' && *str<='z') *str+=(int)('A'-'a');
}
  • strtolower : 대문자를 소문자로 모두 변경(직접 대입한 문자(열)를 바꾸기 못함)

void strtolower(char * str)
{
	for(;*str!='\0';str++) if(*str>='A' && *str<='Z') *str+=(int)('a'-'A');
}
  • strcpy : 한 문자열의 내용을 다른 문자열에 복사(문자열의 길이가 복사하고자 하는 문자열 변수의 범위를 초과하면 안됨)

void strcpy(char * d, char * s)
{
	for(;*s!='\0';s++,d++) *d=*s;
	*d='\0';
}
  • strdup : 문자열 하나를 생성 후 그 곳에 다른 문자열을 복사

char * strdup(char * s)
{
	int len=strlen(s),i;
	char * res = (char *) malloc(sizeof(char)*(len+1));
	for(i=0;i<=len;i++) res[i]=s[i];
	return res;
}
  • strcat : 한 문자열의 내용을 다른 문자열에 이어붙이기(붙여야 될 문자열 변수가 수정할 수 있는 문자열이여야 함, 붙여야 될 문자열 변수가)

void strcat(char * d, char * s)
{
	for(;*d='\0';d++) ;
	for(;*s!='\0';s++,d++) *d=*s;
	*d='\0';
}
  • strstr : 한 문자열 내에 다른 문자열의 내용이 존재하는지 확인, 인덱스 위치를 return 못찾으면 -1을 return

int strstr(char * s,char * p)
{
	int slen,plen,i,j;
	slen=strlen(s);
	plen=strlen(p);
	for(i=0;i<(slen-plen);i++)
	{
		if(s[i]==p[i])
		{
			for(j=i;j<=i+plen;j++) if(s[i+j]!=p[j]) break;
			if(j==plen) return i;
		}
	}
	return -1;
}
  • trim : 꺼억 두가지 종류가 있다.
    • ltrim : 문자가 나오기 전까지의 공백을 앞으로 땡김

void ltrim(char * str)
{
	int cnt=0;
	for(;*str!='\0';str++)
	{
		if(*str==' ')
		{
			cnt++;
			*(str+cnt)=*str;
		}
	}
	*(str+cnt)=*str;
}
  • rtrim : 문자열이 다나온 뒤의 공백을 없애고 NULL을 앞으로 땡김

void rtrim(char * str)
{
	int len,cnt=0,i;
	for(i=len-1;i>=0;i--)
	{
		if(*(str+i)==' ')
		{
			cnt++;
			*(str+i)=*(str+i+cnt);
		}
	}
}



  • 강사님이 너무 힘들어 하시는 것 같아서 제가 한번 페이지를 만들어 보았습니다. 허헣 - 박인서
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:58
Processing time 0.0580 sec