한성현 님이 쓰신 글 :
: 제가 하는 것은.
: 입력값이
: COmmon Business Oriented Language
: 라면
: 출력갑이
: COBOL is COmmon BUsiness Oriented LAnguage
: 가 되는
: 대문자를 추출하는 것입니다.
: 그냥 대문자만 출력하는건 되는데여..
: 아니 그것도 getchar()로 해서 이상합니다.
: gets() 를 쓰고 함수로 정리를 한다면
: 어떻게 해야 되는지 궁금합니다.
:
: #include <stdio.h>
: #include <string.h>
:
: /*
: void main()
: {
: int ch;
: char s1[10];
:
: while((ch=getchar())!='\n')
: {
: if(ch>='A' && ch<='Z')
: {
: for(int j=0;j=='\0';j++)
: {
: s1[j]=putchar(ch);
: }
: }
: }
:
: printf("%s \n",s1);
: } */
: mm(char *);
: void main()
: {
: static char s[50];
: gets(s);
:
: printf("%s is %s\n",mm(s),s);
: }
:
: mm(char *s)
: {
: int i;
: char s1[10];
:
: for(i=0;i<=50;i++)
: {
: if(*(s+i)>='A' && *(s+i)<='Z')
: {
: for(int j=0;j=='\0';j++)
: {
: s1[j]=*(s+i);
: }
: }
: }
: return(*s1);
: }
:
: 위에 주석으로 되있는게 대문자만 거르는 것입니다.
: 이걸 함수로 만들어서 이용할려고 하는데 잘 안됩니다.
: 가르침 부탁드립니다~~
#include<stdio.h>
#include<conio.h>
int GetBigLetters(const char* p ,char *ret);
void RemoveLastNewLineChar(char*p)
#pragma argsused
int main(int argc, char* argv[])
{
const int MAX_INPUT_LEN=1024;
char buffer[MAX_INPUT_LEN+1];
char bigletters[MAX_INPUT_LEN+1];
fgets(buffer,MAX_INPUT_LEN,stdin);
RemoveLastNewLineChar(buffer);//gets()를 사용한다면 이 부분은 불필요.
if(0<GetBigLetters(buffer,bigletters)) printf("%s is %s",bigletters,buffer);
else printf("%s",buffer);
//while(kbhit()) getch(); getch();
return 0;
}
//---------------------------------------------------------------------------
//p 문자열에서 대문자만을 찾아 순서대로 ret에 저장한 후 저장한 문자수를 반환
int GetBigLetters(const char* p ,char *ret)
{
char *oret=ret;
while(*p)
{
if(*p>='A' && *p<='Z') *ret++=*p;
++p;
};
*ret=0;
return(ret-oret);
}
GetBigLetters 함수는 GetAcronym이라 이름 붙이는 것도 괜찮겠습니다.
//---------------------------------------------------------------------------
void RemoveLastNewLineChar(char*p)
{
while(*p)
{
//if(*p=='\n' && *(p+1)=='\0')
if(*(short*)p==0x000A)
{
*p=0;
}
++p;
};
}
//---------------------------------------------------------------------------
|