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;
}
}