c 언어 구현 문자열 의 다양한 조작
#pragma once
#ifndef _STDLIB_H
#define _STDLIB_H
#include <stdlib.h>
#endif
#ifndef _SIXE_H
#define _SIZE_H
#define SIZE 100
#endif
#ifndef _STRING_H
#define _STRING_H
typedef struct
{
char * p_ch;
long Length;
}String;
#endif
#include "stdafx.h"
bool Str(String &T);
bool StrAssign(String &T,char * p_char);
bool StrEmpty(const String &T);
int GetLength(const String &T);
int StrCompare(const String &S,const String &T);
bool StrClear(String &T);
bool StrConcat(String &T,String S1,String S2);
bool SubString(const String &T,int Pos,int Len,String &S);
char GetElem(const String &T,int Pos);
bool Find(const String &T,const String &S);
bool StrCopy(String &T,String S);
int Index(const String &T,const String &S);
bool StrInsert(String &T,int Pos,String S);
bool StrDelete(String &T,int Pos,int Len);
char * GetBuffer(const String &T);
#include "String.h"
bool Str(String &T)
{
T.p_ch=NULL;
T.Length=0;
return true;
}
bool StrAssign(String &T,char * p_char)
{
int Len=0;
char * temp=p_char;
while(* temp!='\0')
{
Len++;
temp++;
}
if(T.Length!=0)
free(T.p_ch);
{
T.p_ch=(char *)malloc((Len+1)*sizeof(char));
if(T.p_ch==NULL)
return false;
else
{
int i=0;
for(i=0;i<Len;i++)
{
T.p_ch[i]=p_char[i];
}
T.p_ch[i]='\0';
T.Length=Len;
return true;
}
}
}
bool StrEmpty(const String &T)
{
if(T.Length==0)
return true;
else
return false;
}
int GetLength(const String &T)
{
return T.Length;
}
int StrCompare(const String &S,const String &T)
{
if(GetLength(S)==GetLength(T))
{
int i;
for(i=0;i<GetLength(S)&&i<GetLength(T);i++)
{
if(S.p_ch[i]<T.p_ch[i])
{
return -1;
}
if(S.p_ch[i]>T.p_ch[i])
{
return 1;
}
i++;
}
return 0;
}
else
{
int i;
for(i=0;i<GetLength(S)&&i<GetLength(T);i++)
{
if(S.p_ch[i]<T.p_ch[i])
{
return -1;
}
if(S.p_ch[i]>T.p_ch[i])
{
return 1;
}
i++;
}
if(GetLength(S)>GetLength(T))
return 1;
else
return -1;
}
}
bool StrClear(String &T)
{
if(T.Length==0)
return false;
else
{
free(T.p_ch);
T.p_ch=NULL;
T.Length=0;
return true;
}
}
bool StrConcat(String &T,String S1,String S2)
{
if(T.Length!=0)
free(T.p_ch);
T.p_ch=(char *)malloc((S1.Length+S2.Length+1)*sizeof(char));
if(T.p_ch==NULL)
return false;
else
{
int i=0,j=0;
for(i=0;i<GetLength(S1);i++)
{
T.p_ch[i]=S1.p_ch[i];
}
for(j=0;j<GetLength(S2);j++,i++)
{
T.p_ch[i]=S2.p_ch[j];
}
T.p_ch[i]='\0';
T.Length=S1.Length+S2.Length;
return true;
}
}
bool SubString(const String &T,int Pos,int Len,String &S)
{
if(Pos+Len>T.Length)
return false;
else
{
if(S.Length!=0)
free(S.p_ch);
else
{
S.p_ch=(char *)malloc((Len+1)*sizeof(char));
int i,temp=Pos+Len;
for(i=0;Pos<temp;i++,Pos++)
{
S.p_ch[i]=T.p_ch[Pos];
}
S.p_ch[i]='\0';
S.Length=Len;
return true;
}
}
}
char GetElem(const String &T,int Pos)
{
if(Pos>=T.Length)
return NULL;
else
{
return T.p_ch[Pos];
}
}
bool StrCopy(String &T,String S)
{
if(S.Length==0)
return false;
else
{
T.p_ch=(char *)malloc((S.Length+1)*sizeof(char));
int i=0;
while(i<S.Length)
{
T.p_ch[i]=S.p_ch[i];
i++;
}
T.p_ch[i]='\0';
T.Length=S.Length;
return true;
}
}
bool StrInsert(String &T,int Pos,String S)
{
if(S.Length==0||Pos>=T.Length)
return false;
else
{
int i,j;
String temp;
Str(temp);
StrCopy(temp,T);
free(T.p_ch);
T.p_ch=(char *)malloc((temp.Length+S.Length+1)*sizeof(char));
if(T.p_ch==NULL)
return false;
else
{
for(i=0;i<=Pos;i++)
{
T.p_ch[i]=temp.p_ch[i];
}
Pos++;
for(j=0;j<S.Length;j++)
{
T.p_ch[i]=S.p_ch[j];
i++;
}
while(Pos<temp.Length)
{
T.p_ch[i]=temp.p_ch[Pos];
i++;
Pos++;
}
T.p_ch[i]='\0';
T.Length=temp.Length+S.Length;
free(temp.p_ch);
return true;
}
}
}
bool StrDelete(String &T,int Pos,int Len)
{
if(Pos+Len>T.Length)
return false;
else
{
String temp;
StrCopy(temp,T);
free(T.p_ch);
int i,j;
T.p_ch=(char *)malloc((temp.Length-Len+1)*sizeof(char));
if(T.p_ch==NULL)
return false;
else
{
for(i=0;i<Pos;i++)
{
T.p_ch[i]=temp.p_ch[i];
}
for(j=Pos+Len;j<temp.Length;j++,i++)
{
T.p_ch[i]=temp.p_ch[j];
}
T.p_ch[i]='\0';
T.Length=temp.Length-Len;
free(temp.p_ch);
}
}
}
char * GetBuffer(const String &T)
{
return T.p_ch;
}
bool Find(const String &T,const String &S)
{
int posT=0,posS=0;
int lengthT=T.Length,lengthS=S.Length;
while(posT<lengthT&&posS<lengthS)
{
if(S.p_ch[posS]==T.p_ch[posT])
{
posT++;
posS++;
}
else
{
if(posS==0)
{
posT++;
}
else
{
if(S.p_ch[0]==T.p_ch[posS])
{
posS=1;
posT++;
}
else
{
posS=0;
posT++;
}
}
}
}
if(posS==lengthS)
{
return true;
}
else
{
return false;
}
}
int Index(const String &T,const String &S)
{
int posT=0,posS=0;
int lengthT=T.Length,lengthS=S.Length;
while(posT<lengthT&&posS<lengthS)
{
if(S.p_ch[posS]==T.p_ch[posT])
{
posT++;
posS++;
}
else
{
if(posS==0)
{
posT++;
}
else
{
if(S.p_ch[0]==T.p_ch[posS])
{
posS=1;
posT++;
}
else
{
posS=0;
posT++;
}
}
}
}
if(posS==lengthS)
{
return posT-S.Length;
}
else
{
return -1;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.