题目描述如下:
分析:之前做过这样的一道题,但是写得太繁琐,今天重新做了这道题。很明显的感觉做出来的效率提升了很多。
这道题的一个难点是,怎么样处理字符串长度大于8,截断后又大于8,又需要截断的情况。很显然,这种场景的处理逻辑应该要用到while循环。完整的代码如下:
1 #include <iostream> 2 3 4 #include "iostream" 5 #include "string" 6 using namespace std; 7 int main() 8 { 9 string input; 10 while (cin >> input) 11 { 12 while (input.size() > 8) 13 { 14 cout << input.substr(0, 8) << endl; 15 input = input.substr(8, input.length()); 16 } 17 int temp= input.size(); 18 for (int i = 0; i < 8 -temp; i++)//这个操作应该有更好的办法.注意这里写是一个bug,因为input-size是不断累加的 19 { 20 input = input + "0"; 21 } 22 cout << input << endl; 23 } 24 25 return 0; 26 } 27
总结:考察知识点:
1、字符串求子串的函数substr()的用法
2、问题理解、然后建模的编程能力。比如讲问题抽象出while循环来处理
之前的一个写法,现在的写法相对来讲是比以前的要简洁不少,主要是对处理逻辑理解的更清晰。可以对照一下:
1 #include "string.h" 2 #include <vector> 3 #include "iostream" 4 using namespace std; 5 int main() 6 { 7 vector<string> input_string_vector; 8 string input_string; 9 while(cin>>input_string) 10 { 11 if(input_string.size()<8) 12 { 13 int number=input_string.size(); 14 for(int i=0;i<8-number;i++) 15 { 16 input_string=input_string+'0'; 17 } 18 input_string_vector.push_back(input_string); 19 20 } 21 else if(input_string.size()==8) 22 { 23 24 input_string_vector.push_back(input_string); 25 } 26 else if(input_string.size()>8) 27 {//1 28 29 while(input_string.size()>8) 30 { 31 32 input_string_vector.push_back(input_string.substr(0,8)); 33 input_string=input_string.substr(8,input_string.size()); 34 } 35 36 if(input_string.size()==8) 37 { 38 input_string_vector.push_back(input_string); 39 } 40 if(input_string.size()<8) 41 { 42 int number=input_string.size(); 43 for(int i=0;i<8-number;i++) 44 { 45 input_string=input_string+'0'; 46 } 47 input_string_vector.push_back(input_string); 48 } 49 // if(input_string.size()==8) 50 // { 51 // input_string_vector.push_back(input_string); 52 // } 53 }//1 54 55 } 56 57 58 for(int i=0;i<input_string_vector.size();i++) 59 { 60 cout<<input_string_vector[i]<<endl; 61 } 62 63 return 0; 64 65 }