各位老大帮忙看看这个问题如何写最简单?

gyscsdn 2005-11-02 07:07:13
有一个字符串是(以"\n"分割):
"mallid=310103123456\ntermno=139654785231\norder=00003995\ngcode=0000130\npaydate=20051031\nname=\ncardno=5248000262355365\nlimit=0804\nprice=2210""

如何写代码实现把各个以"\n"分割各个值取出,然后放入一个数组里?
...全文
106 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqk 2005-11-03
  • 打赏
  • 举报
回复
char *s="Golden\nGlobal\nView"; //要处理的整个字符串
char *d="\n"; //分隔标志
char *p; //遍历的指针

char buffer[10][10];
int i=0;

p=strtok(s,d);
while(p)
{
strcpy(buffer[i],s);i++;
strtok(NULL,d);
}
力为 2005-11-03
  • 打赏
  • 举报
回复
精简一下就是:

int main(int argc, char* argv[])
{
using namespace std;
istringstream iss(INPUT_STRING);
strvec strList;
string strTemp;

while(iss >> strTemp)
{
strList.push_back(strTemp);
}

copy(strList.begin(), strList.end(), ostream_iterator<string>(cout, "\n"));

return 0;
}
力为 2005-11-03
  • 打赏
  • 举报
回复
我上面的解法,没有用到数组,而是用了个std::vector<std::string>,
楼主可以自己把其中的元素取取来放到数组中 :)
力为 2005-11-03
  • 打赏
  • 举报
回复

我用C++写的,刚测试通过:

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <ITERATOR>
#define INPUT_STRING "mallid=310103123456\ntermno=139654785231\norder=00003995\ngcode=0000130\npaydate=20051031\nname=\ncardno=5248000262355365\nlimit=0804\nprice=2210"

typedef std::vector<std::string> strvec;

int main(int argc, char* argv[])
{
using namespace std;

ostringstream oss;
oss << INPUT_STRING <<'\0';
istringstream iss(oss.str());

strvec strList;
string strTemp;
while(iss >> strTemp)
{
strList.push_back(strTemp);
}

copy(strList.begin(), strList.end(), ostream_iterator<string>(cout, "\n"));
char ch;
std::cin >> ch;
return 0;
}
alfwolf 2005-11-03
  • 打赏
  • 举报
回复
不好意思,昨天一个地方写错了
SheetItem( CString str_i, CString str_v ) : item(str_i), value(str_v) {;}
结构后的括号外少个分号:)
DrSmart 2005-11-02
  • 打赏
  • 举报
回复
解决了,来晚了
balloy 2005-11-02
  • 打赏
  • 举报
回复
std::string版:


#pragma warning(disable:4786)
#include <string>
#include <tchar.h>

#ifndef _UNICODE
typedef std::string tstring;
#else
typedef std::wstring tstring;
#endif

#include <vector>
typedef std::vector<std::string> VECTOR_TSTRING;

VECTOR_TSTRING SplitString(const tstring& s, const TCHAR cSplitter)
{
VECTOR_TSTRING vec;
tstring::size_type pos2 = tstring::npos, pos1 = pos2 + 1;

// 不停地查找分隔符,并填充vector
while( (pos2 = s.find(cSplitter, pos1)) != tstring::npos )
{
vec.push_back(s.substr(pos1, pos2 - pos1));
pos1 = pos2 + 1;
}

// 处理剩余字符
tstring::size_type len = s.length() - pos1;
if ( len > 0 )
vec.push_back(s.substr(pos1, len));

return vec;
}

alfwolf 2005-11-02
  • 打赏
  • 举报
回复
可以大致这样写:
struct SheetItem
{
CString item;
CString value;
SheetItem( CString str_i, CString str_v ) : item=str_i, value=str_v{;}
}

vector<SheetItem> _sheetitem;

void ParseString( CString str )
{
CString curstr, temp;

while( str.Find( "\n", 0 ) != -1 )
{
curstr = str.Left( str.Find( "\n", 0 ) );
str = str.Right( str.GetLength() - str.Find( "\n", 0 ) - 1 );
temp = curstr.Left( str.Find( "=", 0 ) );
curstr = curstr.Right( curstr.GetLength() - curstr.Find( "=", 0 ) - 1 );
SheetItem si( temp, curstr );
_sheetitem.pushback( si );
}
// 如果字符串结尾没有\n,那么循环外需要处理最后一个子字串
}
kenskens 2005-11-02
  • 打赏
  • 举报
回复
这样提取出来的子串就是:mallid=310103123456 ntermno=139654785231 norder=00003995 ngcode=0000130 npaydate=20051031 .........

再调用AfxExtractSubString(),最后一个参数设为'=',则可将子串再次分解

参考这里:http://www.vckbase.net/bbs/prime/viewprime.asp?id=353
kenskens 2005-11-02
  • 打赏
  • 举报
回复
// 功能 : 获取子字符串
// 参数 : rString - 输出参数,保存子字符串
// lpszFullString - 源字符串
// iSubString - 子字符串索引,从0开始计数
// chSep - 子字符串间的分隔字符,默认为'\n'
BOOL AFXAPI AfxExtractSubString(CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = '\n');

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧