2017-05-11 1 views
-4

문자열을 2d 문자열로 분할하고 배열의 첫 번째 인덱스를 나눕니다. 3 단어와 2 번째 색인의 refrence 만 저장하여 단어를 저장하고 올바르게 이해했습니다. 보기.
예 : string a = "안녕하세요. 저는 C++ 코드를 작성하고 있습니다.";문자열을 문자열로 분할하는 방법 C++의 2 차원 배열 배열

나는이 작동

string b[100][3]; 
b[0][1]="hello"; 
b[0][2]="I"; 
b[0][3]="am"; 
b[1][1]="writing"; 
b[1][2]="c++"; 
b[1][3]="code"; 
+1

왜 필요합니까? – gsamaras

+1

무엇을 시도 했습니까? 당신의 근원은 무엇입니까? – NathanOliver

+1

어떤 연구를 수행 했습니까? – Eddge

답변

1

로의 변환 할 그리고 당신이 원하는 것을 할 것이라고 생각 : 벡터의

#include <array> 
#include <iostream> 
#include <string> 
#include <utility> 
#include <vector> 

std::vector< std::array< std::string, 3 > > split(std::string const &s) 
{ 
    std::vector< std::array< std::string, 3 > > rv; 
    std::array< std::string, 3 > a; 
    int i = 0; 
    size_t first = 0, len = s.size(); 

    while (first < len) 
    { 
     size_t last = s.find(' ', first); 
     if (last == std::string::npos) 
      last = len; 
     a[i++] = s.substr(first, last - first); 
     first = last + 1; 
     if (i == 3) 
     { 
      rv.emplace_back(std::move(a)); 
      i = 0; 
     } 
    } 
    if (i) 
     rv.emplace_back(std::move(a)); 

    return rv; 
} 

int main() 
{ 
    auto v = split("Hello I am writing c++ code"); 
    for (auto const &a : v) 
     std::cout << "'" << a[0] << "'; '" << a[1] << "'; '" << a[2] << "'\n"; 
    return 0; 
} 
1

벡터 문제에 대한 좋은 우아한 솔루션입니다. 여기에 당신의 문제에 대한 제안 된 해결책이 있습니다.

#include <iostream> 
#include <string> 
#include <sstream> 
#include <algorithm> 
#include <iterator> 
#include <vector> 

using namespace std; 



vector<vector<string>> strTo2DStr(const string& str, const int& r, const int& c) 
{ 
    vector<vector<string>> mat; 
    int rows(r), cols(c); 
    vector<string> words; 
    istringstream ss(str); 
    copy(istream_iterator<string>(ss),istream_iterator<string>(),back_inserter(words)); 

    int counter(0); 
    for (int i(0); i < rows; ++i){ 
     vector<string> temp; 
     for (int j(0); j < cols; ++j){ 
      if (counter < words.size()) 
       temp.push_back(words[counter++]); 
      else 
       temp.push_back(""); 
     } 
     mat.push_back(temp); 
    } 

    return mat; 
} 

int main() 
{ 
    string str("Hello I am writing c++ code"); 
    int rows(3), cols(3); 
    vector< vector<string> > mat = strTo2DStr(str,rows,cols); 

    cout << str << endl << endl; 
    for (int i(0); i < rows; ++i) 
     for (int j(0); j < cols; ++j) 
      cout << "mat[" << i << "]["<< j << "]= " << mat[i][j] << " " << endl; 


    return 0; 
} 

해결 방법은 사용자가 행과 열의 수를 선택할 수 있다는 점에서 유연합니다. 결과는

Hello I am writing c++ code 
mat[0][0]= Hello 
mat[0][1]= I 
mat[0][2]= am 
mat[1][0]= writing 
mat[1][1]= c++ 
mat[1][2]= code 
mat[2][0]= 
mat[2][1]= 
mat[2][2]=