字符串到每个第N行的多个字符串

时间:2012-05-12 21:14:56

标签: c++ arrays string

解决方案感谢1111 ......

vector<std::string> split_at_line(string str, int lines) {
 vector<std::string> nine_ln_strs;
 string temp;
 stringstream ss;
 int i = 0;
 while(i != str.length()) {
     ss << str.at(i);
     if(i == lines) {
        lines += lines;
        getline(ss,temp);
        nine_ln_strs.push_back(temp);
        ss.clear();
        temp.clear();
     }
     if(i+lines > str.length()) {
        getline(ss,temp);
        nine_ln_strs.push_back(temp);
        ss.clear();
        temp.clear();
        break;
     }
     i++;
 }
 return nine_ln_strs;

}

===========================================

我正在尝试练习并学习如何使用多维数组,我遇到了一个问题。我不知道如何将字符串拆分成多个字符串,每隔N行。我搜索过网络,但似乎只有白色空间和令牌的例子。反正有没有做我想做的事情?

示例:

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;

const int five = 5;
int test[][five] = {

{ 0, 0, 1, 0, 0 },
{ 0, 1, 1, 0, 0 },
{ 0, 2, 1, 0, 0 }
};

int main() {
stringstream result;
int a = sizeof test / sizeof ( test[0] );
cout << a << endl;
int b = 5;
for ( int i = 0; i < a; i++ ) {
    for ( int j = 0, inc = 0 ; j < b; j++, inc++ ) {
        if(inc == 2) {
            result << hex << setfill ('0') << setw(4) << (int)test[i][j];
        } else {
            result << hex << setfill ('0') << setw(2) << (int)test[i][j];
        }
    }
}

string s = result.str();
cout << s << endl;

// split the string into segments of every 000000000000 and store them into a new string each time, or another array

   int z;       // hold
   cin >> z;

   return 0;
}

1 个答案:

答案 0 :(得分:0)

可能有更好的方法,但这应该有效

 std::vector<std::string> split_at_line(const std::string& str, unsigned lines) {
     std::vector<std::string> nine_ln_strs;
     std::istringstream ss(str);
     std::string temp, t2;

     while(ss) { //whilst there is still data
         //get nine lines
         for(unsigned i=0; i!=lines && std::getline(ss, t2); ++i) {          
             temp+=t2;
         }
         //add block to container
         nine_ln_strs.push_back(temp));
     }
     //return container
     return nine_ln_strs;
 }

PS:C数组不是很好尝试并尽可能使用容器。同时将five定义为5的常量定义为6也不是很有帮助。在这里使用变量的想法是这样你可以在以后更改它,如果你将值5更改为test_sz那么那就太奇怪了。 {{1}}会是一个更好的名字。