Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 문자열을 작성하는 데 필요한 라인 수

<시간/>

우리는 알파벳의 문자열 Str과 모든 영어 알파벳의 너비를 포함하는 배열 widths[]를 받습니다. 목표는 너비가 10자인 페이지에 이 문자열을 인쇄하는 데 필요한 줄 수를 찾는 것입니다. 나머지 문자도 인쇄합니다.

현재 문자의 문자열 검사 너비를 탐색하고 이 합계가 10줄 이상 증가하는 경우 추가합니다.

예를 들어 이해합시다.

입력

Str = "ababababab"
widths[] = {2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1};

출력

Count of lines: 2 Remaining width: 6

설명

line 1 : ababab ( 2+1+2+1+2+1 = 3+3+3=9)
line 2 : abab (2+1+2+1)

입력

Str = "bbbbbbbbbbdd"
widths[] = {2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1};

출력

Count of lines: 2 Remaining width: 2

설명

line 1 : bbbbbbbbbb (1+1+1+1+1+1+1+1+1+1=10)
line 2 : dd (1+1)

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 문자열 Str과 각 알파벳 공백의 배열 width[]가 있습니다.

  • 함수 numberOfLines(string str,int len, int w[])는 페이지의 줄 수와 마지막 줄의 문자 너비를 표시합니다.

  • numoflines=0으로 초기 줄 수를 가져옵니다.

  • 초기 마지막 줄 너비를 나머지로 사용=0

  • for 루프를 사용하여 문자열 str을 탐색합니다.

  • 현재 문자 c를 str[i]로 사용합니다.

  • c의 너비를 num=width[c-'a']로 확인하세요.

  • 이 숫자를 추가하면 남습니다.

  • 유지>=10인 경우 줄 수를 늘리고 업데이트를 숫자로 유지합니다.

  • for 루프의 끝에 결과를 인쇄합니다.

예시

#include <bits/stdc++.h>
using namespace std;
// Function to return the number of lines required
void numberOfLines(string str,int len, int w[]){
   int numoflines = 0;
   int remain = 0;
   //traversing string
   for (int i=0;i<len;i++){
      char c=str[i]; //current character
      int num = w[c - 'a']; //units for current character remain += num;
      if (remain >= 10){
         numoflines+=1;
         remain = num;
      }
   }
   cout<<"Count of lines: "<<numoflines;
   cout<<endl<<"Remaining width: "<<remain;
}
int main(){
   string Str = "abcdefghijklmnop";
   int length=Str.length();
   int widths[] = {2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 1};
   numberOfLines(Str,length,widths);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Count of lines: 3
Remaining width: 1