在 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 和一個包含每個字母空間的陣列 widths[]。

  • 函式 numberOfLines(string str,int len, int w[]) 顯示頁面中的行數和最後一行字元的寬度。

  • 將初始行數設為 numoflines=0。

  • 將初始最後一行寬度設為 remain=0

  • 使用 for 迴圈遍歷字串 str。

  • 將當前字元 c 設為 str[i]。

  • 將 c 的寬度檢查為 num=width[c-’a’]。

  • 將此 num 新增到 remain。

  • 如果 remain >= 10,則遞增行計數並將 remain 更新為 num。

  • 在 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

更新於:2020-10-31

369 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.