2013-04-14 1 views
3

으로 변환 할 수 없습니다. txt 파일에있는 단어를 문자열 배열에 넣으려고합니다. 그러나 strcpy()에 오류가 있습니다. itis : 'strcpy': 매개 변수 1을 'std :: string'에서 'char *'로 변환 할 수 없습니다. 왜 그런가요? C++에서 이와 같은 문자열 배열을 생성 할 수 있습니까?strcpy C++에서 매개 변수 1을 문자열 char *

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

void ArrayFillingStopWords(string *p); 

int main() 
{ 
    string p[319];//lekseis sto stopwords 
    ArrayFillingStopWords(p); 
    for(int i=0; i<319; i++) 
    { 
     cout << p[i]; 
    } 
    return 0; 
} 

void ArrayFillingStopWords(string *p) 
{ 
    char c; 
    int i=0; 
    string word=""; 
    ifstream stopwords; 
    stopwords.open("stopWords.txt"); 
    if(stopwords.is_open()) 
    { 
     while(stopwords.good()) 
     { 
      c = (char)stopwords.get(); 
      if(isalpha(c)) 
      { 
       word = word + c; 
      } 
      else 
      { 
       strcpy (p[i], word);//<--- 
       word = ""; 
       i++; 
      } 
     } 
    } 
    else 
    { 
     cout << "error opening file"; 
    } 
    stopwords.close(); 
} 
+0

정말 단어를 읽는 방법을 리팩터링하는 것이 좋습니다. 파일이 없으면 어떻게 될까요? 정말로 319 개의 빈 문자열을 표시 하시겠습니까? 당신은 항상 319 단어를 얻을거야 확신합니까? 왜 318 (또는 심지어 더 나쁜) 320? 'std :: vector '을 사용하여'C++ '로 만들고, 파일에서 문자형 읽기를 사용하지 않고 간단한'>>'을 사용하고 필요하다면 비 알파 문자로 분리하십시오 (텍스트 파일의 샘플 여기에 최선의 접근 방식을 제안하는 데 도움이 될 것입니다) – stefan

+0

파일은 확실히 존재합니다. 그것은 숙제의 일부입니다 :), 단어는 확실히 319입니다. 또한 txt 파일의 단어는 각 레인마다 하나씩 있습니다. –

+0

큰 파일과 관련된 다음 연습이있을 수 있다고 상상해보십시오. 정말로 코드를 다시 작성 하시겠습니까? 아니요, 코드가 모든 종류의 파일에 대처할 수 있기를 바랍니다. 열쇠는 lazy_를 비싸지 만 그런 숫자를 하드 코딩하지 않아야합니다. – stefan

답변

3

strcpy (p[i], word);p[i] = word;으로 변경하십시오. 이것은 일을하는 C++ 방식이며 std::string 할당 연산자를 이용합니다.

+0

이 작품은 .. 나는 strcpy를 제외하고는 다른 옵션이 없다고 생각했다. 고맙습니다 –

0

여기에 strcpy이 필요하지 않습니다. 간단한 과제는 p[i] = word;입니다. std::string 당신이 바로, 또는 strcpy 같은 함수를 호출에 대해 배열의 크기를 점점 걱정하지 않아도 의미 사용

const char text[] = "abcd"; 
char target[5]; 
strcpy(target, text); 

: strcpy는 널로 종료되는 문자의 배열 인 C 스타일의 문자열입니다.