Dart 문제 += , 조건문

SeonHo·2024년 9월 1일

Dart

목록 보기
9/13
post-thumbnail

해야할게 많으니 사람이 부지런해 지는거 같습니다.
시간이 촉박하다 ~~

사용자 입력중 대문자에 _ 을 추가와
소문자로 변환하는 문제였습니다.

메인 함수

메인 함수는 사용자가 입력할 때 부분을 넣었고

void main() {
  stdout.write('문자열 입력:');
  String input = stdin.readLineSync()!;
  named(input);

named 함수

named 함수부터 고민했던 부분을 시작하겠읍니다!!

그전에 저는 헷갈리는 부분을void main 으로
하나씩 찍으면서 문제를 해결하고 있습니다.

void main() {
  stdout.write('문자열 입력:');
  String input = stdin.readLineSync()!;
  named(input);
}

named(input) {
  List<String> inputA = input.split('');
  String inputB = '';

  for (int i = 0; i < input.length; i++) {
    if (input.contains(inputA[i].toUpperCase())) {
      inputB += '_' + inputA[i];
    }
  }
  print(inputB);
}

DartPracticeForsplit 으로 나눠주고,
DartPracticeFor 길이는 15글자이므로
for 을 이용해서 사용자 입력만큼 반복하고
if 로 대문자 앞에 _ 출력하게 조건을 했지만

대문자, 대문자 앞에 _ 만 나왔습니다.

예상한대로 나왔지만
'나머지 문자를 어떻게 출력하고,
또 첫 대문자 _ 는 어떻게 지우지?'

if 만 사용하다보니 else 을 까먹고 있었습니다.
튜트리얼 보고 else 을 기억하게 되었어요.

그리고 여기서 += 의 용도를 알게 되었습니다.

inputB += '_' + inputA[i]; // _D_P_F 출력
inputB = '_' + inputA[i]; // _F 만 출력

+= 은 생각한대로 추가해주는 역할이였고
= 은 덮어쓰는(?) 표현이 애매한데

void main(){
  int a = 5;
  a = 3;
  print(a);
  print(a.runtimeType);
}

Type 확인하고 싶을때 runtimeType 써야하는것도 확인

else 문으로 추가하니

else {
  inputB += inputA[i];
}

소문자로 변경하는거와 첫 문장 _ 삭제만 하면 끝인거 같은데

소문자는 toLowerCase() 을 하면 되는데
첫 문장 삭제가 해결이 계속 안됐습니다.

int i = 1;
String inputB = 'd';
로 수정해서 원하는 값은 나왔지만

방법이 아닌거 같아 솔루션을 봤지만 소신발언하면
솔루션 기초용 아닌거 같습니다. 봐도 이해가 안돼서
저런 방법도 있구나? 하고 GPT형한테 물어보니

String inputB = inputA[0].toLowerCase();

어? 따옴표 '' 을 안해줘도 오류가 안나네?
설명에 toLowerCase() 문자열에 대한 메서드여서
따옴표 '' 로 감싸줄 필요가 없다고 하네요.

if , elsetoLowerCase() 있으니
String inputB = inputA[0]; 찍어보닌깐
정상 출력되지만 대문자로 나옵니다. ㅋㅋ

최종 코드는 요롷게 ~
문제에 String 타입으로 반환해줘야 한다고 해서

import 'dart:io';

void main() {
  stdout.write('문자열 입력:');
  String input = stdin.readLineSync()!;
  String result = named(input);
  print(result);
}

String named(input) {
  List<String> inputA = input.split('');
  String inputB = inputA[0].toLowerCase();

  for (int i = 1; i < input.length; i++) {
    if (input.contains(inputA[i].toUpperCase())) {
      inputB += '_' + inputA[i].toLowerCase();
    } else {
      inputB += inputA[i].toLowerCase();
    }
  }
  return inputB;
}

문제 하나에 배운게 많은거 같습니다.
강사님께서 여기까지도(?) 이해 하게끔 의도하신
큰 그림이 아닌가 싶어요. ㅋㅋ

오늘은 하나 더 올릴 생각 입니다.

profile
목표를 달성하자!

0개의 댓글