[MFC] CString 문자열 자르기(string token) [開發] 프로젝트 관련

 CString temp = "2,30,100,2"; // 자를 문자열 ( ", "의 갯수는 변할 수 있다.)
 CString strTok;   
 
 int sepCount = GetFindCharCount(temp, ',');   // " , " 의 갯수를 세어온다.
 
 CString* temp1 = new CString[sepCount+1]; // 구해온 갯수만큼 동적 배열을 할당(CString배열)
 
 int cnt=0;
 while(AfxExtractSubString(strTok, temp, cnt, ','))  // 문자를 잘라준다. (AfxExtractSubString = strTok)
  temp1[cnt++] = strTok;                                       // 해당 배열에 순차적으로 넣어준다.
 
 for(int i=0; i<sepCount+1; i++)
  cout << (LPCSTR)temp1[i] << endl;                  // 화면에 출력한다.

 delete[] temp1;


요렇게... 간단하게 예를 들자면,
CString str = "192.168.0.1";
CString strA, strB, strC, strD;
AfxExtractSubString(strA, str, 0, '.'); // strA == "192"
AfxExtractSubString(strB, str, 0, '.'); // strB == "168"
AfxExtractSubString(strC, str, 0, '.'); // strC == "0"
AfxExtractSubString(strD, str, 0, '.'); // strD == "1"



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


안녕하세요...
 
CString의 멤버 함수에 보면 Find 함수와 GetAt 함수를 이용하시면 원하시는
기능을 구현하실 수 있습니다.
아래와 같이 예제를 작성해 보았습니다.
 
    CString data;
    char temp[20];
    char temp_data;
    int devide_count = 0, devide_index = 0;
    int str_length = 0;
 
    data = "abcd,123,efgh,456,ijk,";
    str_length = data.GetLength();
 
    for(int i = 0; i < str_length; i++){
        // 데이터에서 ',' 값을 찾아 위치 값을 얻는다.
        devide_index = data.Find(',', devide_index);

        // devide_index값이 -1이라면 데이터에 ','값이 존재하지 않는것이므로
        // 함수를 종료한다.
        if(devide_index == -1) return;

        // 찾았다면 devide_index 다음 인덱스부터 검색을 하기 위해 devide_index++하여준다.
        devide_index++;
        devide_count++;

        if(devide_count == 2){
            // devide_count 값이 2라면 내가 원하는 위치의 데이터를 찾은 것이므로
            // 데이터의 남은 길이만큼 for문을 돈다.
            for(i = 0; i < str_length - devide_index; i++){
                // 데이터를 얻어 temp_data 저장한다.
                temp_data = data.GetAt(devide_index+i);
                // temp_data값이 ','값이 temp_data를 temp[i]에 저장한다.
                if(temp_data != ',') temp[i] = temp_data;
                else {
                    temp[i] = 0;
                    MessageBox(temp);
                    return;
                }
            }  
        }
    }
 

덧글

  • 초보 개발자 2019/04/30 16:23 # 삭제 답글

    오타 있으신거같은데

    AfxExtractSubString(strA, str, 0, '.'); // strA == "192"
    AfxExtractSubString(strB, str, 0, '.'); // strB == "168"
    AfxExtractSubString(strC, str, 0, '.'); // strC == "0"
    AfxExtractSubString(strD, str, 0, '.'); // strD == "1"
    이부분에서 주석과 같은 결과가 안나오고
    192
    192
    192
    192
    와 같은 결과가 나옵니다.

    AfxExtractSubString(strA, str, 0, '.'); // strA == "192"
    AfxExtractSubString(strB, str, 1, '.'); // strB == "168"
    AfxExtractSubString(strC, str, 2, '.'); // strC == "0"
    AfxExtractSubString(strD, str, 3, '.'); // strD == "1"
    으로 정정 해주세요 ㅎㅎ
댓글 입력 영역