注册 登录
编程论坛 VC++/MFC

一个字符串查找问题

zzminzzm 发布于 2011-03-21 23:38, 1111 次点击
比如我输入  create -usename  就创建一个用户 和这个用户的名字
       输入 del -usename  删除叫usename的这个用户
        输入 su  -usename  更换用户
7 回复
#2
zzminzzm2011-03-21 23:40
我开始用if语句  遇到空格的时候就分开  但是发现后面的名字又不好保存
#3
zzminzzm2011-03-22 00:14
看来我的问题还是没人解决了  哎
#4
陶卫亮2011-03-22 10:38
你的分隔符应该是"-",用这个分隔分隔,然后对拆出的字符串去空格,就会得到相应的值,create=>usename  del=>usename  usename    su=>usename,然后建立一个MAP<string, set<string>>的映射,这样你想做什么都行,如果想删除,查找del,得到相应的用户名,删除就可以了
#5
shi7812032011-03-22 17:06
用数组将用户名保存,然后再按楼上的操作做!
#6
zzminzzm2011-03-22 21:29
以下是引用陶卫亮在2011-3-22 10:38:08的发言:

你的分隔符应该是"-",用这个分隔分隔,然后对拆出的字符串去空格,就会得到相应的值,create=>usename  del=>usename  usename    su=>usename,然后建立一个MAP>的映射,这样你想做什么都行,如果想删除,查找del,得到相应的用户名,删除就可以了
能不能再讲清楚点  或者弄点代码出来  谢谢
#7
zzminzzm2011-03-22 21:30
回复 4楼 陶卫亮
能不能说清楚点  或者弄点代码出来  谢谢
#8
陶卫亮2011-03-27 18:26
不好意思,最近比较,好长时间没有上来了。
代码如下:

#include <string>
#include <set>
#include <map>
#include <algorithm>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    string  strBuffer[3] = {"create -usename", "del -usename", "su  -usename"};

    string strKey;
    string strValue;

    char pszBuffer[1024];        //这用1024=1K,应该够用了,如果不够用,请自己扩充

    map<string, set<string>> mapContainer;

    for ( int i = 0; i < 3; i++)
    {
        int iLen = strBuffer[i].length();
        if ( iLen > 1024)
        {
            printf( "数组放不下,请扩展数组");
            continue;
        }
        memset(pszBuffer,0, 1024);
        strcpy(pszBuffer,  strBuffer[i].c_str());

        //先判断是否有分隔符"-"
        char *pszSeparator = strstr( pszBuffer, "-");
        if (pszSeparator == NULL)
        {
            continue;
        }

        //strtok解析完成后,数据的内容分别放在了俩个变量中,一个是pszTemp,一个是pszBuffer;
        char *pszTemp = strtok( pszBuffer, "-");
        if(pszTemp != 0)
        {
            strKey = pszTemp;
        }
        pszTemp = strtok(NULL, "-");
        if ( pszTemp != NULL )
        {
            strValue = pszTemp;
        }
        
        //去掉key后面的空格
        while(1)
        {
            int iPos = strKey.rfind(' ');
            if ( iPos > 0)
            {
                strKey = strKey.substr(0,iPos);
            }
            else
            {
                break;
            }
        }
        //去掉Value后面的空格
        while(1)
        {
            int iPos = strValue.rfind( ' ');
            if ( iPos > 0)
            {
                strValue = strValue.substr(0, iPos);
            }
            else
            {
                break;
            }
        }
        
        //要把key转换成小写,以防出现找不到的情况,如Create 与create是不相同的
        transform(strKey.begin(), strKey.end(), strKey.begin(), tolower);
        

        //把解析出的内容放到容器中
        map<string, set<string> >::iterator iter = mapContainer.find( strKey);
        if ( iter == mapContainer.end())
        {
            set<string> setTemp;
            setTemp.insert( strValue );
            mapContainer.insert( make_pair( strKey, setTemp ) );
        }
        else
        {
            iter->second.insert( strValue );
        }
    }
    //后面就是利用容器中的内容,做你想的事情
    return 0;
}
1