1816.截断句子
句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。
例如,"Hello World"、"HELLO" 和 "hello world hello world" 都是句子。
给你一个句子 s 和一个整数 k ,请你将 s 截断 ,使截断后的句子仅含 前 k 个单词。返回 截断 s 后得到的句子。
class Solution { public: string truncateSentence(string s, int k) { char* str1 = (char*)s.data();//string->char char* result = strtok(str1, " ");//第一次分割 string output = result;//输出 for (int i = 1; i < k; i++) { result = strtok(NULL, " ");//第二次分割 output = output+" "+result;//输出叠加 } return output; } };
执行用时:4 ms, 在所有 C++ 提交中击败了37.72%的用户
内存消耗:7.6 MB, 在所有 C++ 提交中击败了5.26%的用户
通过测试用例:72 / 72
标准答案
class Solution { public: string truncateSentence(string s, int k) { int n = s.size(); int end = 0, count = 0; for (int i = 1; i <= n; i++) {//这里i比s[i]多1,i是从1计算 if (i == n || s[i] == ' ') {//这里是遍历到最后或者i下一个是空格就count++(因为最后一个字符后面没有空格) count++; if (count == k) { end = i; break; } } } return s.substr(0, end); //substr(a,b) 返回从第a个位置长度为b的字串 //substr(a) 返回位置a后面的所有剩余字符串(不包括a) } }; int main(){ string s = "Hello every body I am back here"; Solution sol; string s1=sol.truncateSentence(s, 5); cout << s1; system("pause"); return 0; }