C 언어 문자열 함수 소스 상세 설명

3546 단어
1. 문자열을 대상 문자열로 복사
char *strcpy(char *strDestination, const char *strSource);
NULL 끝 문자를 포함하는 원본 문자열strSource를 대상 문자열strDestination에서 지정한 위치로 복사합니다.원본 직렬과 목표 직렬이 중첩된 상황을 처리할 수 없습니다.
함수가strDestination 값을 반환합니다.
소스:
char *strcpys(char *strDes, const char *strSrc) {     
	assert((strDes != NULL) && (strSrc != NULL)); //assert        ,  assert       NULL   
	char *address = strDes;     
	while ((*strDes ++ = *strSrc ++) != '\0')        
		NULL;     
	return address; 
}

관건: assert의 유효성 판단;NULL 끝 문자
사실, 바늘 변수address를 사용하지 않고strDes로 되돌아오기만 하면 됩니다.
테스트:
#include<assert.h>
#include<iostream.h>
void main()
{
	char a[20]="aaaaaaaaaaaaaaaaaa";
   char c[]="i am teacher!";
//	cout<<a<<"
"<<endl; //strcpy(a,c); char *addr=strcpys(a,c); cout<<addr<<endl; //printf("
%s",a); }

결과 출력:
i am teacher!
2. 문자열에서 문자strdel 삭제
이것은 내가 면접한 비행기 문제인데 창고 안의 것이 아니기 때문에 스스로 원형을 썼다.
char*strDel(char*str, const char chTodel) - str의 모든 chTodel 문자를 삭제합니다.
소스:
//     :  pRefStr2  str,     chToDel  ,     pRefStr2
char *strDel(char* str,char chToDel)
{
	
	assert((str!=NULL)&& (chToDel!=NULL));
   char *pRefStr1, *pRefStr2;
	pRefStr1=pRefStr2=str;//           str,               str  

    while(*pRefStr2++){
		if(*pRefStr2!=chToDel) 
		{
			*pRefStr1++=*pRefStr2;//     chToDel  ,      pRefStr1,  pRefStr1       ;
		}
	 }
    *pRefStr1='\0';
    return str;
}

관건: C 언어 프로그램의 순서와 지침에 주의하십시오.
테스트:
#include<iostream.h>
#include<assert.h>
void main()
{
	char destStr[10]="aadddfcca";
	char delStr='a';
	strDel(destStr,delStr);
	cout<<destStr<<endl;}

결과 출력:
dddfcc
3. 문자열 크기 비교
nt strcmp(const char *string1, const char *string2); 문자열string1과string2의 크기를 비교합니다.반환값 <0,string1이string2보다 작다는 것을 나타낸다.되돌아오는 값은 0이고string1은string2와 같다는 것을 나타낸다.반환값 > 0은string1이string2보다 크다는 것을 나타낸다.
소스:
int strcmp(const char *s, const char *t) {    
	assert(s != NULL && t != NULL);     
	while (*s && *t && *s == *t)     
	{        
		 ++ s;         
		 ++ t;     
	}     
	return (*s - *t); 
}

두 문자열이 같은지 아닌지만 판단하는 프로그램도 썼다.
int strCmp(char *strOne,char *strTwo)
{
	assert((strOne!=NULL) && (strTwo!=NULL));
	while(*strOne++ && *strTwo++)
	{
		if(*strOne!=*strTwo)
		{
			return 0;
			break;
		}
		   
	}
	return 1;
}

테스트:
#include<iostream.h>
#include<assert.h>
void main()
{
	char str1[10]="aaabbbccc";
	char str2[10]="aa";
	int result = strCmp(str1,str2);
	cout<<result<<endl;
}

결과 출력:
크기 판단, 출력 결과 97
알파벳 a의 ascii 코드입니다.
출력 결과는 0입니다.
4. 문자열의 순서 반전
char *strrev(char *string); 문자열string의 문자 순서를 뒤집습니다.NULL 끝 문자의 위치는 변경되지 않습니다.조정된 문자열의 바늘을 되돌려줍니다.
소스:
 //       :                。
char *strrev(char *str)
{
	assert(str != NULL);     
    char *st,*et;
	char tmpCh;
	st=et=str;
	while(*et!='\0') ++et;
	for(--et,st;st<et;++st,--et)
	{
		tmpCh=*st;
		*st=*et;
		*et=tmpCh;
	}
	return str; 
}

테스트:
#include<iostream.h>
#include<assert.h>
void main()
{
	char strings[4]="abc";
	strrev(strings);
	cout<<strings<<endl;
}

테스트 결과:
bca
계속 업데이트...

좋은 웹페이지 즐겨찾기