Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[4947] Re:배열 문제 입니다..간단하지만 잘 안되는군요...답을 아무도 안해주는 군요...
[] 1315 읽음    2005-03-14 12:28
쥬신 님이 쓰신 글 :
: 배열로입력받은 문자들과 다시 입력을 받아 같은 글자가 있으면 삭제하는 프로그램 입니다.
: 문제는 한글자는 지워 집니다. 하지만 두글자 이상이 되면 지워 지지 않습니다. 왜그런지는 알지만 방법을 찾질 못하겠습니다.
:
:
:
: //---------------------------------------------------------------------------
: #include <stdio.h>
: #include <conio.h>
: #pragma hdrstop
:
: //---------------------------------------------------------------------------
: bool Tmain(char ich, char jch[]);
: #pragma argsused
: int main(int argc, char* argv[])
: {
:     char ch1[100];
:     char ch2[100];
:     int i,j;
:     bool bold = false;
:     gets(ch1);
:     gets(ch2);
:
:     for(i=0;i<ch1[i]!='\0';i++)
:     {
:         for(j=0;j<ch2[j]!='\0';j++)
:         {
:
:             if(Tmain(ch1[i], ch2))
:             {
:
:                  if(!bold)
:                  {
:                     printf("%c",ch1[i]);
:                  }
:              }
:         }
:     }
:
:     getch();
:     return 0;
: }
:
: bool Tmain(char ich, char jch[])
: {
:     for(int j=0;jch[j]!='\0';j++)
:     {
:         if(ich==jch[j])
:         {
:             return false;
:         }
:      }
:     return true;
: }

아래의 for문의 조건절이 이상합니다.
:     for(i=0;i<ch1[i]!='\0';i++)
:     {
:         for(j=0;j<ch2[j]!='\0';j++)

for(A  ;B  ;C) { D }에서
A에는 for문 시작시 한 번만 실행할 문장을 넣습니다.
B에는 for문을 계속 실행할 조건을 넣습니다.  최종적으로 bool값으로 변환할 수 있는 어떤 것이든 가능.
C에는 for문을 순회할 때마다 실행할 문장을 넣습니다.
따라서, A에 i/j가 들어갔다고 해서 B,C에 i/j가 반드시 있어야 된다는 법은 없습니다.
실행순서는 AB DCB DCB DCB DCB ....
물론, B가 false 결과를 산출하면 for문 실행을 끝냅니다.
0은 false에 해당하고 0 이외의 모든 값은 true에 해당합니다.

ch2에 존재하는 문자들을 ch1에서 제거하는 것이라면 아래와 같이 할 수도 있습니다.

#include<stdio.h>
#include<conio.h>

bool StrChr(const char* str,char ch);
void ShiftLeft(char *str);

#pragma argsused
int main(int argc, char* argv[])
{
   char ch1[100];
   char ch2[100];
   char *p1=ch1;
   gets(ch1);
   gets(ch2);

   while(*p1)
   {
     if(StrChr(ch2,*p1)) ShiftLeft(p1);
     else ++p1;
   }

   printf("%s\r\n%s\r\n",ch1,ch2);
   getch();
   return 0;
}

//---------------------------------------------------------------------------
bool StrChr(const char* str,char ch)
{
  while(*str)
  {
     if(*str++==ch) return true;
  }
  return false;
}

//---------------------------------------------------------------------------
void ShiftLeft(char *str)
{
  while(*str)
  {
   *str=*(str+1);
   ++str;
  }
}

+ -

관련 글 리스트
4925 배열 문제 입니다..간단하지만 잘 안되는군요...답을 아무도 안해주는 군요... 쥬신 1424 2005/02/27
4947     Re:배열 문제 입니다..간단하지만 잘 안되는군요...답을 아무도 안해주는 군요... 1315 2005/03/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.