注册 登录
编程论坛 C++教室

c++ win32下string分隔问题

work504 发布于 2010-08-26 22:57, 1403 次点击
比如有个string strText是"AB 12345 67890"
现在我想把它以空格分隔成三块,放到一个stringArray[3]中,各放一个。
C#中很好实现,如下:
string[] stringArray= strText.Trim().Split(' ');
请问在C++的win32下如何改?
3 回复
#2
work5042010-08-26 23:07
大家帮一下忙啊,知道的话。
#3
无名可用2010-08-27 00:01
// Note:Your choice is C++ IDE
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s="asdf    er qwertyu";
    char arr[3][20];
    int i=0,j=0,k=0;
    for(;s[k]!='\0';k++)
    {
        if(s[k]!=' ')
        {
            arr[i][j++]=s[k];
        }
        else if(s[k+1]!=' ')
        {
            arr[i][j]='\0';
            i++;
            j=0;
        }
    }
    //判断一下原字符串最后一个有效字符是否为空格
    if(s[k-1]!=' ')
    {
        arr[2][j]='\0';
    }
    //
    for(int t=0;t<3;t++)
    {
        cout<<arr[t]<<endl;
    }
    return 0;
}
大体思路就是这样了。
我在学校的专业是学C#的,近期利用暑假时间下了本《c++ primer》在自学,刚学了不到一周,还有很多不懂的地方。
代码中我用char arr[][]代替了string arr[],不知什么原因用string arr[]运行程序时总是报内存错误。。
我认为出错的地方在第一个for循环的   if(s[k]!=' ')
                                    {
                                           arr[i][j++]=s[k];//程序到这里出错
                                    }
处。
#4
pangding2010-08-27 00:04
不用注明 win32 什么的,下面这个方法 ISO C++ 都可以。
sting 本身就可以做为流对象,用的时候包一个 sstream 的头文件就可以了。
程序代码:

#include <iostream>
#include <sstream>
using namespace std;

int main(int argc,char** argv)
{
    string str("AB 12345 67890");
    cout << str << endl;

    istringstream instr(str);
    string array[3];

    for (int i = 0; i < 3; i++)
        instr >> array[i];

    for (int i = 0; i < 3; i++)
        cout << array[i] << endl;

    return 0;
}

1