기반지식/C/C++2010. 6. 16. 22:19
☆ 문자열과 배열

#include <stdio.h>

void main()
{
char s[30]={'O','r','a','n','g','e','\0'};
char s2[]="Apple";
printf("s=%s\n",s);
printf("s2=%s\n",s2);
}

s=Orange
s2=Apple
Press any key to continue

 - char형으로 선언한 30개짜리 배열 s[30]에 문자를 1개씩 넣어서, 그냥 s를 출력하는 것만으로도 문자열을 취급할 수 있다
   (다만 이 경우 30개짜리인데 지정된 문자는 6개 뿐이므로, 마지막에 '\0'을 넣어 문자입력이 끝났음, 즉 문자열의 끝을 알려주어야 에러가 나지 않는다)
 - s2[]의 경우 크기를 정하지 않은 문자열 배열이므로 char s2[]="Apple"; 와 같이 직접 문자열을 넣을 수 있다

☆ 배열을 이용한 문자열의 취급

#include <stdio.h>

void main()
{
char msg[50];
int alpha[26]={0}; //50개짜리 배열 중 26개를 제외한 나머지를 0으로 초기화시킴
int i=0;
puts("영어 문장을 입력하세요");
gets(msg);
while(msg[i]!=NULL)
{
if(msg[i]>=65 && msg[i]<=90) // 소문자라면
alpha[msg[i]-65]++;
else if(msg[i]>=97 && msg[i]<=122) // 대문자라면
alpha[msg[i]-97]++;
i++;
}

puts("== 알파벳의 갯수 ==");

for(i=0;i<26;i++)
{
printf("%c:%d개\t",i+65,alpha[i]);
}
printf("\n");
}

  - 수식을 이용해 배열의 위치를 검사할 때 msg[i - 95]식으로 [] 안에 수식을 쓸 수는 없고, msg[i]-95 식으로 해 주어야 한다
  - 소문자/대문자를 구별할 때 C는 알아서 문자를 아스키 코드값으로 바꾼다(문자형 자료 자체가 내부적으로 아스키 코드값의 정수형으로 취급한다. 이 값을 수식으로 연산하는 것도 가능).


Posted by windship