본문 바로가기

programming/c,c++

이것이 C언어다::12장

12장 문자열

연습문제1

1. char *ps

2. 2번

3.
banana
 anana
  nana
   ana
    na
     a
4.
#include<stdio.h>
int main()
{
 char ani[20];
 char why[80];

 printf("좋아하는 동물: ");
 scanf("%s", ani);
 getchar();
 printf("좋아하는 이유: ");
 fgets(why, sizeof(why), stdin);
 printf("%s is %s", ani, why);
}

5.
#include<stdio.h>
int main()
{
 char name[20];
 char pnum[20];
 char ads[80];
 
 printf("이름: ");
 fgets(name, sizeof(name), stdin);
 name[strlen(name) - 1] = '\0';
 printf("전화번호: ");
 fgets(pnum, sizeof(pnum), stdin);
 pnum[strlen(pnum) - 1] = '\0';
 printf("주소: ");
 fgets(ads, sizeof(ads), stdin);
 ads[strlen(ads) - 1] = '\0';
 printf("%s, %s, %s\n",name,pnum,ads);

 return 0;
}

연습문제2
1. 2,5,6번
2. 2번
3. pineapple ,9
4
#include<stdio.h>
int main()
{
 char str1[80] = {0,};
 char str2[80] = { 0, };
 char *pa, *pb;

 printf("두 단어 입력: ");
 scanf("%s %s", str1,str2);

 if (strlen(str1) > strlen(str2)) pa = str1;
 else pa = str2;
 if (strcmp(str1, str2) < 0) pb = str1;
 else pb = str2;

 printf("길이가 긴 단어: %s\n", pa);
 printf("사전에 먼저 나오는 단어: %s\n", pb);

 return 0;


}

 

5.
#include<stdio.h>
#include<string.h>
int main()
{
 char str[80] = { 0, };
 char res[80] = { 0, };
 char *star = "**********";
 int len;

 printf("단어입력: ");
 scanf("%s", str);
 len = strlen(str);
 if (len <= 5)
  strcpy(res, str);
 else
 {
  strncpy(res, str, 5);
  res[5] = '\0';
  strncat(res, star, len - 5);
 }
 printf("입력한 단어: %s,생략한 단어: %s\n", str, res);

 return 0;

}

 

 

도전문제1
#include<stdio.h>
void func(char *max, char *mid, char *min);
void swap(char *str1, char *str2);
int main()
{
 char max[20] = { 0, };
 char mid[20] = { 0, };
 char min[20] = { 0, };

 printf("세 단어 입력 : ");
 scanf("%s %s %s", max, mid, min);
 func(max,mid,min);
 printf("%s, %s, %s\n", max, mid, min);

 return 0;

}
void func(char *max, char *mid, char *min)
{

 if (strcmp(max, mid) > 0)
 {
  swap(max, mid);
 }
 if (strcmp(mid, min) > 0)
 {
  swap(mid, min);
 }
 if (strcmp(max, mid) > 0)
 {
  swap(max, mid);
 }
}
void swap(char *str1, char *str2)
{
 char temp[20] = { 0, };
 strcpy(temp, str1);
 strcpy(str1, str2);
 strcpy(str2, temp);
}

 

 

 

 

도전문제2
#include<stdio.h>
#include<string.h>
void func(char *str, char *res);
int main()
{
 char str[20];
 char res[80] = { 0, };

 func(str, res);

 return 0;
}
void func(char *str, char *res)
{
 while (1)
 {
  printf("단어입력: ");
  scanf("%s", str);
  if (strcmp(str, "end") == 0) break;
  strcat(res, " ");
  strcat(res, str);
  printf("현재까지의 문자열 : %s\n", res);
 }
}

 

 

도전문제3
#include<stdio.h>
#include<string.h>
void  func();
int check(char *pstr, char *psearch, int len);
int main()
{
 func();

 return 0;
}
void  func()
{
 int eq,len;
 char str[100];
 char search[20];

 printf("문자열 입력: ");
 gets(str);
 while (1)
 {
  printf("검색할 문자열 입력(종료는 end): ");
  gets(search);
  len = strlen(search);
  if (strcmp(search, "end") == 0) break;
  //printf("%s\n%s", str, search);
  eq = check(str, search,len);
  printf("검색 결과 : %d\n", eq);
  eq = 0;
  
 }

 return eq;
}
int check(char *pstr,char *psearch,int len)
{
 int i = 0, cnt = 0;
 char *pcheck; //검사 위치 변수
 
 while (pstr[i] != '\0')
 {
  pcheck = pstr + i;
  if (strncmp(pcheck, psearch, len) == 0)
  {
   cnt++;
   i += len;
  }
  else i++;
 }

 return cnt;
}

 

 

 

 

추가문제

1. strlen 함수
#include<stdio.h>
void func_gets(char *str);
int my_strlen(char *str);
int main()
{
 char str[80];
 int res;
 
 func_gets(str);
 res = my_strlen(str);
 printf("입력된 문자열의 길이(): %d\n", res);

 return 0;
}
void func_gets(char *str)
{
 printf("문자열 입력(공백포함): ");
 gets(str);
}
int my_strlen(char *str)
{
 int i = 0;

 while (1)
 {
  if (str[i] == '\0') break;
  i++;
 }
 return i;
}

 

 

 

2.
//strcat()함수
#include<stdio.h>
void func_gets(char *str);
void my_strcat(char *str1, char *str2);
int main()
{
 char res[80] = { 0, };
 char cp[20] = { 0, };

 func_gets(res);
 func_gets(cp);
 my_strcat(res, cp);
 printf("변경 후: %s\n", res);

 return 0;
}
void func_gets(char *str)
{
 printf("문자열 입력(공백포함): ");
 gets(str);
}
void my_strcat(char *str1,char *str2)
{
 
 while (*str1 != '\0') str1++;
 
 while (*str2 != '\0')
 {
  *str1 = *str2;
  str1++;
  str2++;
 }
 *str1 = '\0';
 
}


3.
//strcpy()함수
#include<stdio.h>
char *my_strcpy(char *str1, char *str2);
int main()
{
 char res[80] = "strawberry";

 printf("변경전: %s\n", res);
 
 my_strcpy(res, "apple");
 printf("변경후: %s\n", res);
 printf("다른 문자열대입: %s\n", my_strcpy(res, "kiwi"));
 return 0;
}
char *my_strcpy(char *str1, char *str2)
{
 char *po = str1;
 while (*str2 != '\0')
 {
  *str1 = *str2;
  str1++;
  str2++;
 }
 *str1 = '\0';
 return po;
}

'programming > c,c++' 카테고리의 다른 글

이것이 C언어다::16장  (0) 2020.03.26
이것이 C언어다::13장  (0) 2020.03.26
이것이 C언어다::11장  (0) 2020.03.26
피드백)이것이C언어다::10장  (0) 2020.03.26
이것이 C언어다::10장  (0) 2020.03.26