2010-02-04 6 views
0

문자열 배열이 있으므로 하위 문자열 (이 경우 쉼표 사이의 문자열)을 가져 와서 다른 문자열 배열에 넣어야합니다.문자열 배열에서 문자열 함수 (.substr) 사용

나는 strings[numberOfTapes]로 선언, 그래서 쉼표를 찾고 있어요 때 나는과 같이, 루프 중첩에 문자로 문자를 이동합니다

for(int j = 0; j < tapes[i].length(); j++){ 
    if(tapes[i][j] == ','){ 
     input[counter2] = tapes[i][j].substr(i-counter, counter); 
    } 
} 

하는 다음과 같은 에러가 발생

request for member 'substr' in tapes[i].std::basic_string::operator[] 
[with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocated] 
(((long unsigned int)))', which is of non class type 'char'

문자를 통해 문자를 j으로 보내고 있습니다. .substrtapes[i][j] 형식으로 작동하도록 할 수있는 방법이 있습니까? 아니면이 방법을 다르게 구현해야합니까?

답변

1

tapes[i][j]은 문자 ','이고 그 문자는 substr 메서드가 없습니다. 단일 문자가 아닌 문자열 객체에 substr을 호출하려고했을 것입니다.

또한 j에 쉼표를 찾은 후에 substr(i-counter, counter)으로 전화하십시오. 그것이 당신의 의도입니까?

1

은 문자열의 배열의 경우, 테이프 [I] [J] 당신이 문자열하고자하는 문자가 아닌 문자열에 액세스, 당신은 아마 원하는 테이프 [I] .substr ...

0

쉼표하는 경우 (,)가 구분 기호로 사용되는 이유는 구분 기호에 따라 문자열을 분할하는 함수를 사용하지 않는 이유는 무엇입니까?

strtok() 함수를 사용하여 쉼표 (,)를 기준으로 분할하는 방법을 생각해 볼 수 있습니다.

Rakesh.

0

높은 수준의 도구를 사용하기보다는 개별적으로 문자열의 순서로 각각의 문자열을 반복 :

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

int main() { 
    using namespace std; 
    istringstream input ("sample,data,separated,by,commas"); 
    vector<string> data; 
    for (string line; getline(input, line, ',');) { 
    data.push_back(line); 
    } 

    cout << "size: " << data.size() << '\n'; 
    for (size_t n = 0; n != data.size(); ++n) { 
    cout << data[n] << '\n'; 
    } 
    return 0; 
} 

는 또한 표준 : : 문자열의 다양한 방법 (가 플러스 너무 많은 "로 설명을 많이 가지고 봐 주방 싱크 ")를 사용하면 find을 사용하여 첫 번째 단계로 루프를 단순화 할 수 있습니다.

관련 문제