Windows下C/C++操作字符串的代码示例

目录

1 按分隔符解析字符串

2 删除字符串里的空格

3 字符串分多行书写的方法

3.1 方法1:使用反斜杠\

3.2 方法2:使用双引号""


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.

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值