2010-05-26 11 views
0

몇개의 C++ 문자열이 있습니다. 모든 문자열에서 첫 단어를 가져와야합니다. 그런 다음 모든 문자 배열을 문자 배열에 넣어야합니다. 내가 어떻게 해?여러 C++ 문자열에서 첫 단어 만 가져 오는 방법은 무엇입니까?

감사드립니다.

+2

숙제 인 경우 태그를 지정하십시오. – egrunin

+1

아직 해 보셨습니까? 시도한 코드를 게시하십시오. 작동하지 않으며 디버그를 도울 수 있습니다. –

+0

먼저 C++ 자습서를 읽으십시오. –

답변

3

그 일을하는 한 가지 방법 ...

// SO2913562.cpp 
// 


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


void getHeadWords(const char *input[] 
        , unsigned numStrings 
        , char *outBuf 
        , unsigned outBufSize) 
{ 
    string outStr = ""; 

    for(unsigned i = 0; i<numStrings; i++) 
    { 
     stringstream ss(stringstream::in|stringstream::out); 
     ss<<input[i]; 

     string word; 
     ss>>word; 
     outStr += word; 

     if(i < numStrings-1) 
      outStr += " "; 
    } 

    if(outBufSize < outStr.size() + 1)//Accomodate the null terminator. 
     //strncpy omits the null terminator if outStr is of the exact same 
     //length as outBufSize 
     throw out_of_range("Output buffer too small"); 

    strncpy(outBuf, outStr.c_str(), outBufSize); 
} 

int main() 
{ 
    const char *lines[] = { 
     "first sentence" 
     , "second sentence" 
     , "third sentence" 
    }; 

    char outBuf[1024]; 

    getHeadWords(lines, _countof(lines), outBuf, sizeof(outBuf)); 

    cout<<outBuf<<endl; 

    return 0; 
} 

이다 그러나 위의 코드는 한계 오류 검사가 있고 보안 결함이있을 수 있습니다. 그리고도없이 내 C++에서 약간 녹슨라고 할 수 있습니다. 채널 eers.

1

어떤 컴파일러를 사용하고 있습니까? chararray로 변환하는 것이 가장 먼저 살펴야 할 사항입니다. 당신은 쉽게 배열을 통해 단계 (공백 확인) 할 수있는이 같은 뭔가 완료 후

:이 몇 가지 숙제처럼 보이는 때문에

while (oldarray[i++] != ' ') 
    yournewarray[j++]; 

은 내가 당신에게 나머지 스스로 알아 가야 그림을 생각한다 학교 :

+1

왜'std :: string'을'char *'로 변환하여'str.find()'를 사용할 수있을 때 수동으로 단계를 밟을 수 있습니까? –

+0

havent는 C++에 많이 있었고, 평이한 것보다 많았습니다. c. 요즘 str.find()와 같은 라이브러리 함수를 모르겠습니다. 컴파일 할 때 컴퓨터에서 똑같은 일을 할 수 있습니다. BTW : 선생님이 수작업으로 숙제를 위해 라이브러리 기능을 더 잘 수행하는 것을 좋아합니다.) – SirLenz0rlot

1

이 숙제입니다 가정, 당신은 "문자열을"말할 때 당신은 char (그리고 std::string)의 간단한 널 (null)로 구분 된 배열을 의미하는 것이 :

define your strings 
define your resulting char array 
for each string 
    find the offset of the first char that is not in the first word 
    append that many bytes of the string to the result array 

숙제가 아닌 경우 약간의 코드를 입력하면 빈칸을 채 웁니다.

첫째, 당신은 당신의 문자 배열에 충분한 공간을 할당해야합니다

2

내가 지금 여기,이 숙제 가정합니다은 일반적인 설명입니다. 숙제에서는 보통 최대 크기를 말합니다. 최대 값은 모든 첫 단어에 대해 충분해야합니다.

이제는 해당 배열에 삽입 포인터에 대한 색인이 있어야합니다. 0에서 시작하십시오.

이제 순서대로 문자열을 이동하십시오. 각각에서 \ 0 또는 공백 (또는 다른 구분 기호)이 나타날 때까지 인덱스를 0에서 앞으로 이동하십시오. 결과 배열의 삽입 지점에 문자를 삽입하고 해당 인덱스를 1 씩 증가 시키십시오.

공백 또는 \ 0 인 경우 첫 번째 단어를 찾았습니다. 마지막 문자열에 삽입 포인터를 삽입하면 \ 0을 삽입하고 완료하면 공백을 삽입하고 다음 문자열로 이동하십시오

여기
관련 문제