안녕하세요, 어서 오세요 이번 강의에서는 이전 과제에
대한 해결책을 보여드릴게요
str 길이 함수를 이용해서
문자열의 문자를 역전시키는 방법과 str
비교를 이용해서 문자열을 정렬하고 str 복사하는
방법과 버블 알고리즘을 이용해 알아보도록
할게요.
코드 블록을 불러오죠
이걸 위한 단일 프로그램을 만들게요 두 가지 프로그램을 만드신다고
말씀드렸었죠
하지만 단순하고 데모 측면에서 하나만 만들게요
프로젝트를 생성하고
문자열 함수라고 이름을 짓겠습니다
혹은 그 변형을 이용해서요
일반 문자열 함수 예라고
하죠
그럼 반대부터 시작하죠 그 반대는 그 자체의 기능을 할 수도 있고
메인 화면에 넣을 수도 있어요 메인에 넣으려고 했어요
그럼 제일 먼저 제가 할 일은… 사실 제일 먼저 할 일은 올바른
헤더 파일을 포함하는 겁니다 이 문자열 함수를 사용할 수 있도록요
포함 문자열이죠 H요
멋진 문자열 함수를 모두 포함하고 있어요
이제 문자 배열을 만들 거예요 100 사이즈로 만들 거예요
임의적이라 100개
이상의 것은 저장할 수 없어요
몇 가지 로컬 변수를 생성하겠습니다 구문
분석에 도움이 될 거예요 제가 하려는 건 먼저 사용자에게
결과물을 보여주는 거예요
몇 줄 전송을 입력하고 개별
문자열을 프린트하고
역순서를 입력할게요
무슨 일이 벌어지는지 사용자에게 알려주고 좀 더 분명하게
하기 위해 프린트하는 거죠 그런 걸
프린트하면 읽기가 쉬워요
문자열을 input하라고 할 거예요 문자열을 읽을 거예요
그런 다음 문자열을 저장하죠
scanf, 현재
s 그리고 str이라고 입력할게요
&를 넘겨주지 않아도 알 수 있어요
이제 스트링의 길이를 잴게요. 그걸 l 로컬 변수에 넣을 거예요
문자열에 str 길이 전달을 해서 str link를 호출할 수 있어요. 그러면
문자열에 몇 개의 문자를 반환할 수 있어요. 아주 쉬워요
그런 다음 글자를 역순으로 출력할 거예요
r 백슬래시 n을 거꾸로 하면
문자열 글자가 되죠
그런 다음 근사한 for 루프를 작성할 거예요
배열에 따라 길이대로 역행하는 거죠
for I = l이라고 하죠
실제 문자열 배열에서 뒤로
돌아갈게요 끝에서 시작해서 앞으로 갈게요
I가 0보다 크거나 같다고
하고 I는 빼세요 보다시피 null 종료 문자를 살펴볼
필요가 없죠 이런 식으로 할 때는요
그런 다음 제가 접하는 각각의 캐릭터를 출력할 거예요
캐릭터를 출력하고 퍼센트 c를 하는 걸 보려면요
그리고 str sub-I라고 입력하세요
그게 다예요
그런 다음 새 라인을 출력하죠
마지막으로 많은 걸 프린트할 거예요 많은
탭이요
잘 되는지 보죠 아주 쉬워요 길이를
맞추는 건 어렵지 않을 거예요
라인 피드를 잊었네요 고치죠
여기서 문자열의 개별 문자를 반대로 프린트하거나 문자열을 입력하라고 하죠
scanf는 읽기만 할 거예요. Jason space Feden을 입력할게요.
Scanf는 Jason과 공간만 읽어요
전부 다 읽으려면 f get s 같은 다른 함수를 사용해야죠
이게 하는 일은 Jason이 nosaj를 거꾸로
인쇄하는 거죠 현을 역행하는 글자는 노자즈예요
아주 간단해요 복잡한 함수나 구현이
아니죠
이제 줄을 정렬해 볼게요
이제 뭔가를 할 거예요 지금 당장은 메인 코스에서 할 거예요
이걸 실제 함수에 넣어야 하는데 이번 강의에선 함수를
보여드리지 않고 문자열을 보여드리죠
필요한 로컬 변수를 몇 개 더 생성하죠
주로 이름을 만들 거예요
이 경우엔 문자열 배열을
생성하려고 했는데요 문자열 배열을 만들어 f get s를 사용하죠
문자열 배열을 만들 거예요 2차원 배열
같네요
지금 50사이즈의 25개의 문자열을 생성하고 있어요
그런 다음 또 다른 걸 생성하죠 그냥 25개요 이건 각각의
문자열을 포함하죠
그런 다음 변수 두 개를
더 추가할 거예요 n과 j를 추가할게요
반대로 한 다음에 프린트할게요
또 다른 메시지는 우리가
버블 정렬을 이용해 배열의
문자열을 정렬하고 있다는 거죠
거품 종류는 설명 안 할게요 이 알고리즘은 우리가 하는 일과
관련이 없어요 그냥 정리하는 방법이에요
사실 가장 쉬운 방법이죠 바꾸기만 하면 되니까요
하지만 우리가 하려는 건 먼저 문자열이 몇 개 들어가는지 보는 거죠 문자열의 printf input
number 그런
다음 scanf라고 하죠
Scanf는 숫자에 불과하기 때문에 여기서 사용할 수 있어요
%d라고 입력하고 로컬 변수 n에 저장할 거예요
제가 대단한 이름을 쓰진 않지만
뭔가를 보여드리고 있어요 잇츠니까 &를 통과해야 해요
그리고 strings를 입력하도록 요청할 거예요.
여기 input string
1 또는 2 또는 3이라고
입력하고 라인 피드를 넣죠
입력해야 하는 숫자일 뿐이죠
1번, 2번, 3번 스트링이요
그런 다음 루프를 통해 입력을 얻게 되죠
그래서 여기서 I = 0 라고 하고 I =
n 보다 작으면 문자열 몇 개를 입력할지 입력하죠
I + 더하기 또는 더하기 I요
여기서 문자열을 실제로 읽겠습니다 다른 방법으로 읽어서
F get s를 이용해 빈칸이 있는 문자열을
입력할 수 있어요 하지만 필요 없었어요
scan f를 하고,
scanf를 읽어서 우리 name 배열을 할 거예요.
name이 있고 문자열은 25글자로
되어 있어요
50자에 25단어요
입력할 수 있는 최대 단어는 25개예요
이름 배열에 저장할
거예요 scanf라고 입력해 볼게요.
문자열로 읽어보고 name sub I로 입력할
거예요.
그래서 배열을 25개까지만 저장할 수 있죠
이제 루프가 끝났으니 버블 정렬을 쓸 수 있어요
우리 버블 정렬은 설명하지 않을게요 그냥 아주 간단한 알고리즘이고
내부 루프가 있다고만 말씀드릴게요
for 루프가 있어요 모든 문자열에 걸쳐
1이 되죠
그런 다음 내부 루프에서 0에서 모든 문자열
1로 가죠 첫 번째 문자열을 다른 문자열과 비교하세요
거품으로 눌러요 하지만 여기서 중요한
건 str 비교 기능이에요
str 복사 함수에서 이 들여쓰기를
제대로 해보죠 이게 정말 중요해요
보다시피 4 둘 다 괄호가 없죠 단일 문장이니까요
if의 몸통에 뭔가 있긴 하지만 이건 한 문장에 불과해요
그러니까 아까 한 단어를 비교한 후 각각의 단어를
다른 단어와 비교하고 있는 거죠
그리고 if str과 name subj와 name
subj 1을 비교해요 그러니까 str
비교는 2개의 인수와 2개의 문자
배열, 문자 포인터를 취하죠
둘이 같다면 0을 반환하겠죠
첫 번째 매개 변수가 두 번째
매개 변수보다 작으면 0보다
적게 반환하죠
첫 번째 매개 변수가 두 번째 매개 변수보다
크면 0, 1보다 큰 걸 반환해요
무슨 뜻이냐면 첫 번째 문자열이 두 번째 문자열보다 크면 모든
걸 바꿔야 한다는 거죠 그래서 임시직이 있는 거예요
Temp는 임시 스트링을 저장하는 거예요
임시로 subj를 입력하고 subj를
j+1로 바꾸는 거예요.
거품 분류가 그래요 여기서 중요한 것은 str 비교와 str 복사예요
안전하다면 strn 비교를 사용하세요
strn과 비교해 보세요 strn 비교는 신경 안 쓰셔도
돼요 왜냐하면 그건 접두사를 비교하고 싶을 때만 해당되니까요
str 카피는 strn 카피를 써야 해요
그 세 번째 매개 변수가 중요해요
strn 카피는 템프 1보다 큰 건 복사하지 않는
게 좋아요 안 그러면 버퍼 오버플로가 생기거든요
만약 이게 캐릭터 버퍼가 아니라면
str-rpm을 사용해야 할 거예요
포인터라면요 이 정도 크기면 충분해요
이렇게 하면 완충기 초과도 없어져요
strn 카피를 쓰는 게 더 안전해요
Null 터미네이터가 맨 끝에 있으니까요
strn 카피의 소스 목적지예요
이름 subj를 temp에 복사합니다. j 더하기 1과 subj도
똑같이 복사하고요. 마지막, temp in names
subj+1이요 이 변수들을 업데이트
해야 합니다 왜냐하면 항상 소스여야
하기 때문이죠 이름은 subj로 하고요.
마지막은 j 더하기 one의
이름이에요 j 더하기 1이요
strn 복사와 str 비교예요 함수 사용이 아주 쉽죠
정리가 끝나면 출력할 거예요
정렬 후에 문자열이 나타나도록 하고
싶어요 라인 피드에
넣은 다음 루프를 거쳐서 배열의 모든 문자열을
프린트하죠
4 I = 0이라고 하죠
I가 n보다 작거나 같아요 n은 우리가 정렬하고
입력한 문자열이 몇 개인지를 의미하거든요
이제 스트링 배열을 살펴볼 텐데요
printfs 라인 피드와 name
sub I라고 하죠
name sub I는 사실 정렬된 배열이에요 그래서 name
sub I가 있는 거죠
두 번째 것은 없지만요 그게 각 캐릭터의 크기를 나타내니까요
50단어 중 최대 25단어요
작동하는지 보죠
제가 철자를 몰라서 메시지가 몇 개 왔어요
이걸 실행하면요 먼저 역방향 함수를 실행할게요 같은 프로그램에
포함됐으니 다시 보실 수 있죠
페딘과 이스라엘 방위군이면 좋은 거죠
정렬할 문자열 개수를 입력하세요 5번,
아니면 쯔즈 이런 식으로요
살짝 실수했지만 이제 된 것 같아요 b d f r z
효과가 있네요 근데 버그가 하나 있어요
input string %d 때문에요
n에 문자열 개수를 입력하고 작다=라고 하죠
그냥 작다라고 해야 해요
시현을 위해 다시 실행해보죠 하지만 빌드해야 해요
변화를 준 후에 다시 짓는 것도 잊지 마세요
다시 아무렇게나 말하고 문자열에 번호를
매겨요 4개만
하죠
그래서 알파벳순으로 D, E, L, Z라고 적었죠
이 코드를 개선할 수 있어요 모든 걸 기능에 넣고 좀
더 모듈화할 수 있는 코드요 제가 이 과제에서 하고자 하는 것은 strn 비교를
어떻게 사용하고 strn 카피를 어떻게 사용하고 strn 길이를 어떻게
사용하느냐 하는 거에요.
str cat, strn cat도 사용해야
해요 이것도 보편적인 기능이죠
슈스트르스트와 슈트하르를 갖고 노는 게 좋을 거예요 그런 건 정말 정말 훌륭하죠
upper는 lower로 문자를 체크하거나 atui
nad atof 변환 함수도요
고마워요 도움이 됐으면 좋겠네요