Cstring은 모든 노드 정보를 저장하고 Cstring의 노드 정보를 읽습니다.
1 나중에 문서에 저장할 수 있도록 Cstring 변수에 정보 저장
Cstring은 다음과 같은 형식으로 정보를 저장합니다.
2_0_1_3_4
그중 2는 2개의
절차는 다음과 같습니다.
struct Node{
int nStart;
int nEnd;
};
std::vector<Node> numInfoVector;
Node node;
node.nStart=0;
node.nEnd=1;
numInfoVector.push_back(node);
//...
// ...
// ...
// CString
CString content;
CString temp;
content.Format(_T("%d"),numInfoVector.size());
for (int i=0;i<numInfoVector.size();i++)
{
temp.Format(_T("_%d_%d"),numInfoVector.at(i).nStart,numInfoVector.at(i).nEnd);
content+=temp;
}
// content 1_0_1
2 정보를 읽는 방법:
잘못된 읽기 방법:
왼쪽 첫 번째를 읽고 그 값 n을 얻으면,
그리고 n회 순환, 매번 4자리 절취d_d
사용stscanf(str,_T("_%d_%d"),&nStart, &nEnd); 읽기
분석: 2 의 경우0_1_3_4 이 예, 이 방법으로 읽는 것은 문제없지만, 10보다 큰 숫자에 대해서는 오류가 있다
예: 211_13_22_25
그 중에서 수학적으로 11은 Cstring에서 두 글자로 취급되기 때문에 처음 4자리를 캡처했을 때 얻은 문자열은 다음과 같다.11_아니d_d의 형식으로 인해 오류가 발생했습니다.
정확한 사고방식은 왼쪽에서 오른쪽으로 ''를 끊임없이 찾는 것이다.정확한 분할 위치를 정합니다.
다음은 이 형식의 디지털 정보를 정확하게 읽는 프로그램입니다.
//content CString , 2_11_13_15_30
//
struct PositionNode
{
int nStart;
int nEnd;
};
PositionNode node;
std::vector<PositionNode> PositionVec;
int nStart=0;
nStart=content.Find(_T('_'));
CString numStr;
if (nStart>0)
{
numStr=content.Left(nStart);
}else{
AfxMessageBox(_T("content "));
return;
}
int num=_ttoi(numStr);
if (num>0)
{
content=content.Right(content.GetLength()-nStart);// , content _d_d
for (int i=0;i<num-1;i++)
{
nStart=0;
for (int j=0;j<2;j++)// _d_d ‘_’
{
nStart=content.Find(L'_',nStart+1);// nStart+1 , , nStart
}
numStr=content.Left(nStart); // _d_d
_stscanf(numStr,_T("_%d_%d"),&node.nStart,&node.nEnd);
PositionVec.push_back(node);
}// , content _d_d
_stscanf(content,_T("_%d_%d"),&node.nStart,&node.nEnd);
PositionVec.push_back(node);
}// ,
또한 문자열에서 포맷된 데이터를 읽는 함수를 소개합니다stscanf()
_stscanf는 문자열에서 서식 적용 데이터를 읽습니다. MSDN의 예는 다음과 같습니다.
#include <stdio.h>
int main( void )
{
char tokenstring[] = "15 12 14...";
char s[81];
char c;
int i;
float fp;
// Input various data from tokenstring:
// max 80 character string:
sscanf( tokenstring, "%80s", s ); // C4996
sscanf( tokenstring, "%c", &c ); // C4996
sscanf( tokenstring, "%d", &i ); // C4996
sscanf( tokenstring, "%f", &fp ); // C4996
// Note: sscanf is deprecated; consider using sscanf_s instead
// Output the data read
printf( "String = %s
", s );
printf( "Character = %c
", c );
printf( "Integer: = %d
", i );
printf( "Real: = %f
", fp );
}
Output
String = 15
Character = 1
Integer: = 15
Real: = 15.000000
알고리즘을 캡슐화하려면 다음과 같이 하십시오.
struct Node{
int nStart;
int nEnd;
};
1) 모든 노드에 대한 정보를 Cstring으로 저장
// CString
void SaveNodeInfoToCString(const std::vector<Node> &nodeInfoVector,CString &nodeInfoStr)
{
//Node
//nodeInfo Node
// CString , ,
//
// 2_1_2_6_8 2 , 1、2 6、8
if (nodeInfoVector.size()>0)
{
CString nodeTemp; //
//
nodeInfoStr.Format(L"%d",nodeInfoVector.size());
for (int i=0;i<nodeInfoVector.size();i++)
{
nodeTemp.Format(L"_%d_%d",nodeInfoVector.at(i).nStart,nodeInfoVector.at(i).nEnd);
nodeInfoStr+=nodeTemp;
}
}
}
2) Cstring에서 노드 정보 읽기
// nodeInfoStr : 2_1_2_6_8 ,
void ReadNodeInfoFromCString(CString nodeInfoStr,std::vector<Node> &nodeInfoVector)
{
//
nodeInfoVector.clear();
if (!nodeInfoStr.IsEmpty())
{
// 、
int num=0;
Node node;
int nStart=0;
CString temp;
//
nStart=nodeInfoStr.Find(L'_');
if (nStart>0) // temp 2
temp=nodeInfoStr.Left(nStart);
else
return;
//
num=_ttoi(temp);
// nodeInfoStr : _1_2_6_8
nodeInfoStr=nodeInfoStr.Right(nodeInfoStr.GetLength()-nStart);
//
// 2 , num-1 '_'
for (int i=0;i<num-1;i++)
{
nStart=0;
for (int j=0;j<2;j++)
{
// nStart+1
// 1 _
// , _
nStart=nodeInfoStr.Find(L'_',nStart+1);
}
// temp _1_2
temp=nodeInfoStr.Left(nStart);
_stscanf(temp,_T("_%d_%d"),&node.nStart,&node.nEnd);
//
nodeInfoVector.push_back(node);
// ,
nodeInfoStr=nodeInfoStr.Right(nodeInfoStr.GetLength()-nStart);
}
// ,nodeInfoStr _6_8
_stscanf(nodeInfoStr,_T("_%d_%d"),&node.nStart,&node.nEnd);
nodeInfoVector.push_back(node);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.