CS Study/C

8. char 자료형 / 포인터 심화

Ryannn 2022. 4. 6. 20:20

1. 3개의 수 덧셈 - 문자열 정수로 변환

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
	int sum = 0;
	char str[6];
	int i;
	for (i = 0; i < 3; i++) {
		printf("Enter an integer string : ");
		scanf("%s", str);
		sum += atol(str);
	}
	printf("The total is %d", sum);
	return 0;
}

2. 문장에 있는 알파벳 개수 세기

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int NALPHA = 'z' - 'a' + 1;   
int alpha_count[NALPHA] = { 0 };
int total_count = 0;

int main()
{
	char c;
	float freq;
	float j;
	int i, charcnt;
	char str1[80],str2[80],str3[80];

	printf("Enter three lines of text : \n");
	gets_s(str1);    
	gets_s(str2);
	gets_s(str3);
	charcnt = strlen(str1);   

	for (i = 0; i < charcnt; i++)
		if ((str1[i] >= 'a') && (str1[i] <= 'z')) {   
			alpha_count[str1[i] - 'a']++;    
			total_count++;                
		}
	for (i = 0; i < charcnt; i++)
		if ((str2[i] >= 'a') && (str2[i] <= 'z')) {   
			alpha_count[str2[i] - 'a']++;   
			total_count++;                
		}
	for (i = 0; i < charcnt; i++)
		if ((str3[i] >= 'a') && (str3[i] <= 'z')) {   
			alpha_count[str3[i] - 'a']++;    
			total_count++;               
		}

	for (i = 0; i < NALPHA; i++)
		if (alpha_count[i] != 0)   
			printf("%c : %d ȸ\n", ('a' + i), alpha_count[i]);

}

3. 문장 내 단어 길이 별로 출력

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int NALPHA = 'z' - 'a' + 1;   
int alpha_count[NALPHA] = { 0 };
int total_count = 0;

int main()
{
	char c;
	float freq;
	float j;
	int i, charcnt;
	char str1[80],str2[80],str3[80];

	printf("Enter three lines of text : \n");
	gets_s(str1);    
	gets_s(str2);
	gets_s(str3);
	charcnt = strlen(str1);   

	for (i = 0; i < charcnt; i++)
		if ((str1[i] >= 'a') && (str1[i] <= 'z')) {   
			alpha_count[str1[i] - 'a']++;    
			total_count++;                
		}
	for (i = 0; i < charcnt; i++)
		if ((str2[i] >= 'a') && (str2[i] <= 'z')) {   
			alpha_count[str2[i] - 'a']++;   
			total_count++;                
		}
	for (i = 0; i < charcnt; i++)
		if ((str3[i] >= 'a') && (str3[i] <= 'z')) {   
			alpha_count[str3[i] - 'a']++;    
			total_count++;               
		}

	for (i = 0; i < NALPHA; i++)
		if (alpha_count[i] != 0)   
			printf("%c : %d ȸ\n", ('a' + i), alpha_count[i]);

}

4. 문자열 사전 순서대로 출력

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
	char string[10][50];
	char tmp[500];
	int i, j;
	for (i = 0; i < 10; i++) {
		printf("Enter a string : ");
		gets_s(string[i]);
	}
	for (i = 0; i < 10; i++) {
		for (j = 0; j < 9 - i; j++) {
			if (strcmp(string[j],string[j+1]) > 0) {
				strcpy(tmp, string[j]);
				strcpy(string[j], string[j+1]);
				strcpy(string[j+1], tmp);
			}
		}
	}
	printf("The strings in sorted order are : \n");
	for (i = 0; i < 10; i++) {
		printf(" %s\n", string[i]);
	}
}

5. 문자열 암호화

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void encryptor(char str[][50], char arr[]);
void decryptor(char str[][50], char arr[]);

int main(void) {
	char string[10][50] = { "craftbeer", "metallica", "whitewine", "champagne", "bourgogne", "sandiego", "lafayette", "pinotnoir", "sauvignon", "dondiablo" };
	char ctext[50] = {0};
	encryptor(string, ctext);
	decryptor(string, ctext);

	return 0;
}
void encryptor(char string[][50], char ctext[]) {
	int i = 0;
	srand((unsigned)time(NULL));
	int ran1 = rand() % 10;
	int ran2 = rand() % 19 + 1;
	while (string[ran1][i] != '\0') {
		ctext[i] = string[ran1][i] + ran2;
		i++;
	}
	printf("	<Encryptor>	\n");
	printf("Selected word : %s\n", string[ran1]);
	printf("Selected value of the key : %d\n", ran2);
	printf("CIphertext : %s\n\n", ctext);
	printf("Decoder\n");
	printf("Ciphertext input : %s	\n\n", ctext);

}
void decryptor(char string[][50], char ctext[]) {
	int i, j, k ,count;
	char ptext[50] = {0};
	for (i = 1; i < 20; i++) {
		j = 0;
		while (ctext[j] != '\0') {
			ptext[j] = ctext[j] - i;
			j++;
		}
		printf("> Guess %d <\n", i);
		printf("  Key : %d\n", i);
		printf("  Plaintext : %s\n", ptext);
		count = 0;
		for (k = 0; k < 10; k++) {
			if (strcmp(ptext, string[k]) == 0) {
				printf("Found the correct answer!\n\n");
				printf("result : %d was selected as the Key.\n", i);
				printf("'%s was the Plaintext.", ptext);
			}
			else {
				count++;
			}
		}
		if (count == 10)
			printf("Matching word not found.\n");
		else
			break;

	}

}