컴파일이 아니라 런타임에서 예를 들어 c(3)이라는 값을 입력하면 3*2*1을 출력하고 싶다고 할 때, 어떻게 해결할까요?
예컨데, 컴파일의 경우는 using namespace std;void c(int n){함수} 한 다음에, int main(){c(상수)} 이렇게 입력하면 3*2*1이 출력됩니다.
그렇다면, 컴파일에 의해 값을 구해보는 것이 아니라,프로그램을 사용하는 사용자 입장에서 c(3)이렇게 다 칠 때, 3*2*1의 값이 출력되게 하고 싶으면 어떻게 해야되나요?
if문으로 c(상수)를 입력하면, 위를 출력하라 이런식으로 짜볼려고 해도, 딱히 생각이 떠오르지 않네요. 전부 다 문자 체이면 char*이나 string의 경우 해결이 가능하고, 상수의 경우 if문으로 바로 하면 되겠지만, c(상수)이렇게 입력하면 3*2*1을 출력하라 이런 함수를 만들려고 하는데 생각이 들지를 않네요.
알고리즘의 경우가 아니라 런타임에 의해 출력되게 하고 싶으면 어떻게 해야할지 궁금해서 물어봅니다.
굳이 c++이 아니라 c나 python같은 것도 괜찮습니다. c++이라 한 이유는 위 내용을 코딩할 때 제일 가능성이 높은 것 같아 질문 드렸습니다
파이썬이면 그냥 [...]) 이렇게 하면 되겠지만 C++로 하려면 간단한 문자열 인터프리터 만들던가 lua 같은 스크립트 언어 쓰던가 해야지.
그냥 만들었네요.. string d[2]를 atoi(&d[2])로 for문 돌려서 억지로 만들었음
for문은 아님
아 맞네 헷갈렸다 지금 만드는 중이라서 다 만들었음
c나 c++같은 컴파일 언어에선 못하고 스크립트 언어에선 eval쓰면 됨
결국 만들었네요 도움주셔서 감사합니다
c(상수) 라는 형식 자체가 개발자가 정의한 포맷이기때문에 사용자 입력을 받고 input에 대해서 유효성 검사를 한다음
직접 필요한 부분을 파싱해서 계산을 하면되겠지
예 방금 그렇게 만들었네요 int main(){ //입력 c(3) int gop = 1; string d; cin >> d; for (int a = 1; a <= atoi(&d[2]); a++) { gop *= a; } cout << gop << endl; }
int main(){ int gop = 1; string d; cin >> d; for (int a = 1; a <= atoi(&d[2]); a++) { gop *= a; } cout << gop << endl; } 도움 주셔서 감사합니다
그렇게하면 input이 c(12) 이렇게들어오면 어떡할라고?
알고리즘 문제면 확실히 어려운데, 알고리즘 문제가 아니기 때문에 그런 경우는 함수를 하나 더 만들면 될 것 같네요
아니면 atoi가 a같은 문자가 아니면 무조건 상수처리로 되니까 될 것 같긴한데 잠시만요
전체를 atoi로 해주고, >이 1이 나오니까 이 값만 예외처리 해주면 되겠네요
int main(){ int gop = 1; int length; string d; cin >> d; gop = atoi(&d[2]); for (int k = 1; k < atoi(&d[2]); k++) { gop *= k; } cout << gop << endl;} 해보니까 문자정수를 구분을 잘 못해서 111 11 1이런식으로 출력하길래, 결국은 atoi(&d[2])에 값이 다 나온다는 것을 이용해 이렇게 풀었네요
sizeof의 경우 결론적으로 값을 바꿔버리고, msize의 경우 동적할당이 아니라서 포인터가 아니므로, 작동이 안되서 크기를 어떻게 할 지 고민하다가 size만 쳤는데 잘 되네요. 역시 함수는 최대한 많이 배우는 게 답인듯
그걸로 전체 spring을 출력하는 방법을 알고 아래처럼 spring전체를 출력하는 방법을 모색했네요. for (int i = 0; i < size(d); i++) { cout << atoi(&d[i]) << endl; } 이렇게 한후, atoi[]의 특징을 발견하고, 위 함수와 같이 출력했네요 ㅅㅅ