반응형

텍스트 파일을 열어서 파일 안에 들어 있는 문자들을 모두 대문자로 변경하는 프로그램을 작성한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 100
 
int main(void)
{
    FILE *fp=NULL;
    char a[SIZE];
    int i;
    if((fp=fopen("1.txt","r+"))==NULL)
    {
        printf("잘못된 파일 열기\n");
        exit(1);
    }
    fgets(a,SIZE,fp);
    printf("입력 파일 : ");
    for(i=0;a[i]!=NULL;i++)
    {
        printf("%c ", a[i]);
    }
    printf("\n");
    fseek(fp,0,SEEK_SET);
    for(i=0;a[i]!=NULL;i++)
    {
        a[i]=toupper(a[i]);
    }
    fputs(a,fp);
    fseek(fp,0,SEEK_SET);
    fgets(a,SIZE,fp);
    printf("출력 파일 : ");
    for(i=0;a[i]!=NULL;i++)
    {
        printf("%c ", a[i]);
    }
    printf("\n");
    return 0;
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

fgets 함수  (0) 2017.02.11
파일 복사  (0) 2017.01.31
텍스트 파일 비교  (0) 2017.01.31
암호화와 복호화  (0) 2017.01.16
대소문자 변경  (0) 2017.01.16
반응형

비트 연산자를 이용하여 대소문자를 변경할 수 있다. 대문자의 아스키 코드는 모두 여섯번째 비트가 0이고 소문자의 경우에는 여섯 번째 비트가 모두 1이다. 따라서 XOR 연산을 이용하여 문자의 여섯 번째 비트를 바꿔주면 대소문자가 바뀌게 된다. 이 성질을 이용하여 사용자가 입력한 문자열의 대소문자를 바꾸는 프로그램을 작성하라. 앞 문제에서 작성한 display_bit() 함수를 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(void)
{
    char s[50];
    int i=0;
    printf("문자열을 입력하세요: ");
    gets(s);
    while(s[i]!='\0')
    {
        printf("%c",s[i]^32); //32는 2진수로 100000
        i++;
    }
    printf("\n");
    return 0;
}
cs

만약  32 (100000) 이면 공백 이후 문자가 출력이 안되는데요 그 이유는 공백의 아스키 코드가 32(100000) 인데,

i am a boy 에서 i 이후 나오는 공백과 xor 연산을 하게 되는 것을 볼 수 있습니다. 그런데

같은 수를 XOR연산하면 무조건 000000 이나오고 이것의 아스키코드는 널문자(\0) 입니다. 따라서 조건문이 종료되버립니다.


반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

텍스트 파일 비교  (0) 2017.01.31
암호화와 복호화  (0) 2017.01.16
정수 비트 이동  (0) 2017.01.16
2진수 출력  (0) 2017.01.16
비트 매크로  (0) 2017.01.15
반응형

문자열을 사용자로부터 받아서 영어의 대문자는 소문자로, 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하여 보자. getchar()를 이용하여 키보드로부터 문자를 하나 입력받는다. 입력받은 문자가 소문자이면 대문자로, 대문자라면 소문자로 변환하여 putchar()를 이용하여 출력한다. 만약 영어 알파벳의 범위를 벗어나는 문자가 들어오면 경고 메시지를 출력한다. 이 작업을 사용자가 '.'를 입력할 때까지 되풀이 하는 프로그램을 자것ㅇ한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
void transform(char a);
int main(void)
{
char a;
while(1){
printf("문자를 입력하세요: ");
a=getchar();
getchar();
if(a=='.')
    break;
transform(a);
}
return 0;
}
void transform(char a)
{
if((a>='a')&&(a<='z'))
    {a=a-'a'+'A';
putchar(a);
printf("\n");}
else if((a>='A')&&(a<='Z'))
    {a=a+'a'-'A';
putchar(a);
printf("\n");}
else
    printf("잘못된 입력입니다.\n");
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

단어 수 계산  (0) 2016.08.20
질문에 대한 답변  (0) 2016.08.20
문자열내 문자 빈도수  (0) 2016.08.20
문자열 속의 문자 개수 세기  (4) 2016.08.19
공백 제거  (0) 2016.08.19
반응형

문자열을 받아서 문자열에 포함된 문자를 대문자로 변환하는 함수 str_upper(char *s) 를 작성하고 테스트하라.

'a'아스키코드 : 97 'A' 아스키코드 : 65 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#define SIZE 50
int str_upper(char *s);
int main(void)
{
    char a[SIZE]={0};
    int x;
    x=str_upper(a);
    if(x==1)
    printf("변환된 문자열: %s\n", a);
    else
    return 0;
    return 0;
 
}
int str_upper(char *s)
{
int i;
int result=1;
printf("문자열을 입력하세요(소문자만): ");
    scanf("%s", s); //char *gets(char a);
for(i=0;s[i]!=NULL;i++)
{
if(s[i]>='a'&&s[i]<='z')
    s[i]=s[i]-'a'+'A';
else
    {printf("잘못된 입력입니다.\n");
result=0;
break;}
}
return result;
}
cs






반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

공백 제거  (0) 2016.08.19
아스키 코드  (0) 2016.08.19
배열 합치기  (0) 2016.08.16
최대공약수와 최소공배수  (0) 2016.08.15
배열 탐색  (0) 2016.08.15

+ Recent posts