Program to print last N lines | Set-2
Given some text lines in one string, each line is separated by ‘\n’ character. Print the last N lines. If the number of lines is less than N, then print all lines.
An approach for this problem has been already discussed in Set-1 where only 10 lines were printed. In this post, another approach is discussed for printing the last N lines.
Algorithm:
- Split the string around ‘\n’ using strtok.
- Store the individual strings in a vector.
- Print the last N strings from vector.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void PrintLast(string s, int t)
{
vector<string> v;
char * str = &s[0];
char * token = strtok (str, "\n" );
while (token) {
v.push_back(token);
token = strtok (NULL, "\n" );
}
if (v.empty()) {
cout << "ERROR: string doesn't contain '\\n' character\n" ;
return ;
}
if (v.size() >= t) {
for ( int i = v.size() - t; i < v.size(); i++)
cout << v[i] << endl;
}
else {
for ( int i = 0; i < v.size(); i++)
cout << v[i] << endl;
}
}
int main()
{
string s1 = "str1\nstr2\nstr3\nstr4\nstr5\nstr6\nstr7\nstr8\nstr9"
"\nstr10\nstr11\nstr12\nstr13\nstr14\nstr15\nstr16\nstr17"
"\nstr18\nstr19\nstr20\nstr21\nstr22\nstr23\nstr24\nstr25" ;
int n = 10;
PrintLast(s1, n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static void printLast(String s, int t)
{
String[] v = s.split( "\n" );
if (v.length == 0 )
{
System.out.println( "ERROR: string doesn't " +
"contain '\\n' character" );
return ;
}
if (v.length >= t)
{
for ( int i = v.length - t; i < v.length; i++)
{
System.out.println(v[i]);
}
}
else
{
for ( int i = 0 ; i < v.length; i++)
{
System.out.println(v[i]);
}
}
}
public static void main(String[] args)
{
String s1 = "str1\nstr2\nstr3\nstr4\nstr5\nstr6\nstr7" +
"\nstr8\nstr9\nstr10\nstr11\nstr12\nstr13" +
"\nstr14\nstr15\nstr16\nstr17\nstr18\nstr19" +
"\nstr20\nstr21\nstr22\nstr23\nstr24\nstr25" ;
int n = 10 ;
printLast(s1, n);
}
}
|
Python3
def PrintLast(s, t):
v = s.split( '\n' )
if len (v) = = 0 :
print ( "ERROR: string doesn't " ,
"contain '\\n' character\n" )
return
elif len (v) > = t:
for i in range ( len (v) - t, len (v)):
print (v[i])
else :
for i in range ( 0 , len (v)):
print (v[i])
if __name__ = = "__main__" :
s1 = "str1\nstr2\nstr3\nstr4\nstr5\nstr6" + \
"\nstr7\nstr8\nstr9\nstr10\nstr11" + \
"\nstr12\nstr13\nstr14\nstr15\nstr16" + \
"\nstr17\nstr18\nstr19\nstr20\nstr21" + \
"\nstr22\nstr23\nstr24\nstr25"
n = 10
PrintLast(s1, n)
|
C#
using System;
class GFG
{
static void printLast(String s, int t)
{
String[] v = s.Split( '\n' );
if (v.Length == 0)
{
Console.WriteLine( "ERROR: string doesn't " +
"contain '\\n' character" );
return ;
}
if (v.Length >= t)
{
for ( int i = v.Length - t; i < v.Length; i++)
{
Console.WriteLine(v[i]);
}
}
else
{
for ( int i = 0; i < v.Length; i++)
{
Console.WriteLine(v[i]);
}
}
}
public static void Main(String[] args)
{
String s1 = "str1\nstr2\nstr3\nstr4\nstr5\nstr6\nstr7" +
"\nstr8\nstr9\nstr10\nstr11\nstr12\nstr13" +
"\nstr14\nstr15\nstr16\nstr17\nstr18\nstr19" +
"\nstr20\nstr21\nstr22\nstr23\nstr24\nstr25" ;
int n = 10;
printLast(s1, n);
}
}
|
Javascript
function PrintLast( s, t)
{
const v = s.split( "\n" );
if (v.length==0) {
console.log( "ERROR: string doesn't contain '\\n' character\n" );
return ;
}
if (v.length >= t) {
for (let i = v.length - t; i < v.length; i++)
console.log(v[i]);
}
else {
for (let i = 0; i < v.length; i++)
console.log(v[i]);
}
}
let s1 = "str1\nstr2\nstr3\nstr4\nstr5\nstr6\nstr7\nstr8\nstr9\nstr10\nstr11\nstr12\nstr13\nstr14\nstr15\nstr16\nstr17\nstr18\nstr19\nstr20\nstr21\nstr22\nstr23\nstr24\nstr25" ;
let n = 10;
PrintLast(s1, n);
|
Output
str16
str17
str18
str19
str20
str21
str22
str23
str24
str25
Time Complexity: O(n)
Auxiliary Space: O(n)
Last Updated :
22 Nov, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...