在 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 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告