언어/C

string reverse, 공백제거

하나의묵 2021. 5. 17. 19:33

0430_String.c 

먼저 문자열을 반전 시키는 코드이다.

 

char string[] = "I love you.";
char string2[20] = {0,};

int count = strlen(string);
for (int i = 0; i < count; i++)
{
string2[(count - 1)-i] = string[i];

}

printf("%s", string2);

 

먼저 I love you. 라는 문자열을 가진 변수를 선언하였고,  반전시킨 문자들을 저장시킬 string2를 선언 하였다.

strlen()을 통해 문자열의 길이를 알아내고 count변수에 초기화를 하였다.

 

for (int i = 0; i < count; i++)
{
       string2[(count - 1)-i] = string[i];

}

 

for문을 문자열의 길이만큼 돌면서 

string2[(count - 1)-i] = string[i]; 즉 끝에서부터 문자를 받아 해당 위치에 대응되는 곳에

문자를 하나하나 넣어준다. 

 

두번째로는 공백제거 기능을 작성했다

 

char str1[100] ="I love you.";
int count=0;
int j = 0;


for (int i = 0; i<strlen(str1); i++)
{
    char t = str1[i];

    if (t !=' ')
    {
      str1[j] = t;
       j++;
    }
///////////////
  int gap = i - j;

  if (i == strlen(str1)-gap)
  {
      str1[i - gap] = '\0';
  }
  //////////////

}
str1[j] = '\0';

printf("%s\n", str1);

 

먼저 for문을  str1의 문자열 길이만 큼 돌리고자 strlen(str1)을 사용하였다.

for문을 돌면서 문자열의 문자를 하나씩 얻어 비교를 진행하였다.

 

만약 받아온 문자가 공백이 아니라면 그문자는 다시 해당위치에 넣어주고 j를 +1해준다.

if (t !=' ')
{
   str1[j] = t;
   j++;
}

 

이러한 행동은 문자열에서 공백을 제거한 다는 것은 공백이 있었던 자리에 

뒤에 있던 요소들을 배열의 한칸 씩 앞으로 옮겨야 하기때문에 필요하다.

 

if (i == strlen(str1)-gap)
{
  str1[i - gap] = '\0';

 

만약 i가 strlen(str1)-gap 즉 마지막 값이라면

str1의 마지막을 널값으로 바꾸었다.

 

모든 소스코드는 저의 깃허브 https://github.com/hanamuk 에서 공유 하도록 하겠습니다.

교육에서 작성한 코드는 Bit_MasterClass 저장소에 있습니다.

'언어 > C' 카테고리의 다른 글

string cat, string lenth 구현..  (0) 2021.05.17
string 대소문자 변경  (0) 2021.05.17
C언어  (0) 2020.03.11