There is a forum that has a limit of K characters per entry. In this task your job is to implement an algorithm for cropping messages that are too long. You are given a message, consisting of English alphabet letters and spaces, that might be longer than the limit. Your algorithm should crop a number of words from the end of the message, keeping in mind that:
it may not crop away part of a word; the output message may not end with a space;
the output message may not exceed the K-character limit; the output
message should be as long as possible. This means that, in some
cases, the algorithm may need to crop away the entire message,
outputting an empty string
.
For example, given the text:
"Codility We test coders"
With K = 14 the algorithm should output:
"Codility We"
Note that:
the output "Codility We te" would be incorrect, because the original message is cropped through the middle of a word;
the output "Codility We " would be incorrect, because it ends with a space;
the output "Codility We test coders" would be incorrect, because it exceeds the K-character limit;
the output "Codility" would be incorrect, because it is shorter than the correct output.
Write a function
char * solution(char *message, int K);
which, given a message and an integer K, returns the message cropped to no more than K characters, as described above.
Examples:
-
Given message = "Codility We test coders" and K = 14, the function should return "Codility We".
-
Given message = "Why not" and K = 100, the function should return "Why not".
-
Given message = "The quick brown fox jumps over the lazy dog" and K = 39, the function should return "The quick brown fox jumps over the lazy".
-
Given message = "To crop or not to crop" and K = 21, the function should return "To crop or not to".
Assume that:
K is an integer within the range [1..500];
message is a non-empty string containing at most 500 English alphabet letters and spaces. There are no spaces at the beginning or at the end of message; also there can’t be two or more consecutive spaces in message.
In your solution, focus on correctness. The performance of your solution will not be the focus of the assessment.
>Solution :
This code will pass all performance and correctness tests
char * (char *message, int K) {
int N = strlen(message); // Length of message
int last_index=0;
// if length of message is less than Limit, just return the same message
if (N <= K){
return message;
}
else{
//find the space after last word without breaking the word
for (int i = K; i > 0; i--){
if(isspace(message[i])){
last_index = i;
break;
}
}
//trim the message by adding "end of string" to index we found in previous step
message[last_index] = '\0';
return message;
}
}