VC++6.0怎样在一行字符串中获取特定两个字符中间的字符串
4个回答
展开全部
在VC++中字符串分为ASCII字符串,也就是标准C中的(ASCII)字符串和宽字节字符串,也就是C++中引入的wchar_t类型。获取字符串也可以分为为这两种情况。
对于ASCII字符串:
标准C中:
#include <string.h> char *strchr( const char *str, int ch );
功能:函数返回一个指向str 中ch
首次出现的位置,当没有在str 中找ch到返回NULL。
例如:
char* GetSubString( const char* pStr , char chFirst , char chSecond )
{
char* pFirst = strchr( pStr , chFirst );
if( !pFirst )
{
return NULL;
}
char* pSecond = strchr( pStr , chSecond );
if( !pSecond || pFirst == pSecond )
{
return NULL;
}
char* pTemp = NULL;
if( pFirst > pSecond )
{
pTemp = pFirst;
pFirst = pSecond;
pSecond = pFirst;
}
char* pDest =
reinterpret_cast<char*>malloc( pFirst - pSecond + 1);
//也可用new
if( pDest )
{
return FALSE;
}
pTemp = pDest;
while( pFirst != pSecond )
{
*pTemp++ = *( ++pFirst );
}
pTemp = '\0';
return pDest; //记得free,如果new 要delete []
}
ASCII和Unicode可以用CString.
CString GetSubString( const CString& str , TCHAR chFirst , TCHAR chSecond )
{
int nIndexFirst = str.Find( chFirst );
int nIndexSecond = str.Find( chFirst );
if( nIndexFirst == nIndexSecond || nIndexFirst - nIndexSecond = -1
|| nIndexFirst - nIndexSecond = 1 )
{
return CString( _T( "") );
}
if( nIndexFirst > nIndexSecond )
{
int nTemp = nIndexFirst;
nIndexFirst = nIndexSecond;
nIndexSecond = nTemp;
}
return str.Mid( nIndexFirst , nIndexSecond );
}
注意:
(1)在使用CString的同时要根据当前字符选择是否使用Unicode才能得到正确结果。
是否使用在项目属性中设置,不要手动设置宏开关。
( 2 ) 也可借助STL的string完成上面的功能,类似于CString的用法。
对于ASCII字符串:
标准C中:
#include <string.h> char *strchr( const char *str, int ch );
功能:函数返回一个指向str 中ch
首次出现的位置,当没有在str 中找ch到返回NULL。
例如:
char* GetSubString( const char* pStr , char chFirst , char chSecond )
{
char* pFirst = strchr( pStr , chFirst );
if( !pFirst )
{
return NULL;
}
char* pSecond = strchr( pStr , chSecond );
if( !pSecond || pFirst == pSecond )
{
return NULL;
}
char* pTemp = NULL;
if( pFirst > pSecond )
{
pTemp = pFirst;
pFirst = pSecond;
pSecond = pFirst;
}
char* pDest =
reinterpret_cast<char*>malloc( pFirst - pSecond + 1);
//也可用new
if( pDest )
{
return FALSE;
}
pTemp = pDest;
while( pFirst != pSecond )
{
*pTemp++ = *( ++pFirst );
}
pTemp = '\0';
return pDest; //记得free,如果new 要delete []
}
ASCII和Unicode可以用CString.
CString GetSubString( const CString& str , TCHAR chFirst , TCHAR chSecond )
{
int nIndexFirst = str.Find( chFirst );
int nIndexSecond = str.Find( chFirst );
if( nIndexFirst == nIndexSecond || nIndexFirst - nIndexSecond = -1
|| nIndexFirst - nIndexSecond = 1 )
{
return CString( _T( "") );
}
if( nIndexFirst > nIndexSecond )
{
int nTemp = nIndexFirst;
nIndexFirst = nIndexSecond;
nIndexSecond = nTemp;
}
return str.Mid( nIndexFirst , nIndexSecond );
}
注意:
(1)在使用CString的同时要根据当前字符选择是否使用Unicode才能得到正确结果。
是否使用在项目属性中设置,不要手动设置宏开关。
( 2 ) 也可借助STL的string完成上面的功能,类似于CString的用法。
展开全部
1)找到第一个字符(循环)
2)拷贝字符直到找到第二个字符
3)加字符串结束符。
char s[50]="*********!*********想要提取每一个!*****";
char t[50];
while(*s && *s!=‘!')s++;
while(*s &&(*t=*s)!='!'){s++;t++;}
*t='\0';
2)拷贝字符直到找到第二个字符
3)加字符串结束符。
char s[50]="*********!*********想要提取每一个!*****";
char t[50];
while(*s && *s!=‘!')s++;
while(*s &&(*t=*s)!='!'){s++;t++;}
*t='\0';
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议用标准模板库做,具体是 string
两次子串匹配找到位置,然后在将目标串的格式转成你要的char *,或者直接用也行
两次子串匹配找到位置,然后在将目标串的格式转成你要的char *,或者直接用也行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string s=(自己写);
要求串s1和串s2之间的串为s3
string s3=s.Substring(s.IndexOf(s1),s.IndexOf(s2)-s.IndexOf(s1)-s2.Length);
要求串s1和串s2之间的串为s3
string s3=s.Substring(s.IndexOf(s1),s.IndexOf(s2)-s.IndexOf(s1)-s2.Length);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询