目录
1 按分隔符解析字符串
MFC有几个未公开的函数很有用,AfxExtractSubString()就是其中之一。你在MSDN文档里是找不到关于这个函数的说明的,但是你如果研究过MSDN里的例子程序的话,就会发现很多代码中都使用了这个函数。它的功能简单说来就是从某个用NULL或者换行符"/n"分割的字符串中吸取子串。
/*
功能:按分隔符解析字符串
参数: rString - 保存输出的子字符串
lpszFullString - 待分割的字符串
iSubString - 提取的子字符串的序号,从0开始。假如你想提取第3段,该参数就输入2
chSep - 用于分割的字符,默认的是'\n'
返回:分割成功,就返回TRUE;iSubString越界,则返回FALSE
*/
BOOL AfxExtractSubString(CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = '\n')
CString szGet;
CString szText = "var hq_str_sh600736=\"苏州高新,5.33,5.32,5.70,5.85,5.32,5.71,5.72,56939555,323766177,92561,5.71,121300,5.70,57200,5.69,34600,5.68,18600,5.67,130327,5.72,177801,5.73,40999,5.74,194908,5.75,69600,5.76,2011-08-12,15:03:07\";";
AfxExtractSubString(szGet, szText, 1, ','); //取回 5.33
AfxExtractSubString(szGet, szText, 2, ','); //取回 5.32
AfxExtractSubString(szGet, szText, 3, ','); //取回 5.70
//想要取回苏州高新
AfxExtractSubString(szGet, szText, 0, ','); //先取回var hq_str_sh600736="苏州高新
AfxExtractSubString(szGet, szGet, 1, '\"'); //取回 苏州高新
AfxExtractSubString是截取字符串的函数,很好用,不过美中不足的地方在于它只能使用单个字符作为分割符。但是这种情况在很多时候都行不通,如果分割符需要是两个字符以上呢?可以使用CString里面的Find实现。
int splitString(CString str, CStringArray& strArray, char split)
{
strArray.RemoveAll();
CString strTemp = str; //此赋值不能少
int nIndex = 0; //
while( 1 )
{
nIndex = strTemp.Find(split);
if( nIndex >= 0 )
{
strArray.Add( strTemp.Left(nIndex));
strTemp = strTemp.Right( strTemp.GetLength() - nIndex - 1 );
}
else break;
}
if (strTemp.GetLength()>0)
{
strArray.Add(strTemp);
}
return strArray.GetSize();
}
void CTestAAADlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString temp ="1223231233;333;444;555;6661123123;1223231233;333;444;555;6661123123;";
CStringArray mystr;
int lRV = splitString(temp,';',mystr);
CString szErr;
szErr.Format("%d",lRV);
for (int i=0;i<lRV ;i++)
{
AfxMessageBox(mystr.GetAt(i));
}
}
2 删除字符串里的空格
/*
**C语言 删除字符串内的空格
*/
#include<stdio.h>
#include<string.h>
//遍历元字符串,删除空格
char *func(char *str)
{
int j = 0;
for(int i=0;i<strlen(str);i++)
{
if(str[i] != ' ')
{
str[j++] = str[i];
}
}
str[j] = '\0';
return str;
}
int main(int argc, char const *argv[])
{
char str[100];
char *str1;
printf("请任意输入含有空格的字符串:\n");
fgets(str,100,stdin);
str1 = func(str);
printf("删除空格之后的字符串为:%s\n",str1);
return 0;
}
3 字符串分多行书写的方法
当字符串太长时,可能需要分多行书写。
3.1 方法1:使用反斜杠\
CString str;
str.Format("第一行\
第二行\r\n");
char ch[10];
strcpy(ch, "123\
456");
反斜杠\写在需要换行的地方,后面不能有空格,同时连接的每一行必须顶格,不然连成的字符串会把前面空的Tab符或空格算成字符串的一部分,产生空白。
3.2 方法2:使用双引号""
CString str;
str.Format("第一行"
"第二行\r\n");
char ch[10];
strcpy(ch, "123"
"456");
由于方法1需要注意空格的问题,所以更推荐方法2.