字符串转化为整形数组

zhangchunge 2009-04-08 10:39:38
AnsiString s="34 45 55 67";
转化后的结果
int m[]={34 45 55 67};
...全文
289 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Waiting4you 2009-04-09
  • 打赏
  • 举报
回复
用STL更简单,就是头文件有点多
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;

AnsiString s="34 45 55 67";
int m[10]={0};
stringstream ss(s.c_str());
copy(istream_iterator<int,char>(ss),
istream_iterator<int,char>(),
m);

这样数据就已经在数组m里了。

另外,推荐使用vector,这样能适应任意大小的数组:

vector<int> m;
stringstream ss("34 45 55 67");
copy(istream_iterator<int,char>(ss),
istream_iterator<int,char>(),
back_inserter(m));
morris88 2009-04-09
  • 打赏
  • 举报
回复

AnsiString s = "34 45 55 67";
int m[5];
int i = 0;
char *ps = s.c_str();

while (1) {
m[i] = atoi(ps);
while (*ps && *ps != ' ') ++ps;
if (!*ps)
break;
++ps;
++i;
}
Jim@luckeeinc.com 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Ring_Pt 的回复:]
AnsiString s="34 45 55 67";
TStringList *sg = new TStringList;
sg->DelimitedText = s;
sg->Delimiter = ' ';
int m[4];
for(int i = 0; i < sg->Count; i++)
{
m[i] = sg->Strings[i].ToInt();
}
delete sg;
for(int i = 0; i < sg->Count; i++)
{
ShowMessage(m[i]);
}

上面的這個分割方法很常見 不過應該還有更簡單的方法
[/Quote]

沒注意 寫錯了 delete sg; 放最後去
其他語言也一樣 基本都有分割字符串的函數 比如bcb裏有ExtractStrings php裏的explord等等
痞子酷 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 morris88 的回复:]
C/C++ code
int m[4];
AnsiString s = "34 45 55 67";
sscanf(s.c_str(), "%d %d %d %d", &m[0], &m[1], &m[2], &m[3]);
[/Quote]
----------------
简单!
遗憾是数组不能扩展
gyj_china 2009-04-09
  • 打赏
  • 举报
回复
10楼的提出不是CB就不能这样了,确实.下面给一个C++通用的解决方法,自己写一个分割函数
#include <string>
#include <vector>
#include <iostream>

using namespace std;

// 分割函数
template <class T>
void delimiter(const char* src, const char* split, vector<T>&vec_out)
{
char* ptr = new char[strlen(src)+1];
strcpy(ptr, src);

char* p= strtok(ptr, split);
while (p != NULL)
{
vec_out.push_back(static_cast<T>(p));
p = strtok(NULL, split);
}

delete[] ptr;
}

int main(int argc, char* argv[])
{
int m[4];
vector<string>vec_str;
string s = "34 45 55 67";

// 将s中的字符按" "分隔,保存到vec_str中
delimiter(s.c_str(), " ", vec_str);
for(int i = 0; i < sizeof(m)/sizeof(int); i++)
{
m[i] = atoi(vec_str[i].c_str());
}

return 0;
}
gyj_china 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Ring_Pt 的回复:]
AnsiString s="34 45 55 67";
TStringList *sg = new TStringList;
sg->DelimitedText = s;
sg->Delimiter = ' ';
int m[4];
for(int i = 0; i < sg->Count; i++)
{
m[i] = sg->Strings[i].ToInt();
}
delete sg;
for(int i = 0; i < sg->Count; i++)
{
ShowMessage(m[i]);
}

上面的這個分割方法很常見 不過應該還有更簡單的方法
[/Quote]
支持楼上的正解
zhangchunge 2009-04-08
  • 打赏
  • 举报
回复
对了,有个错误解释下,是int m[]={34,45,55,67};不是int m[]={34 45 55 67};
sorry!
zhangchunge 2009-04-08
  • 打赏
  • 举报
回复
继续顶,找到最简单的方法
Jim@luckeeinc.com 2009-04-08
  • 打赏
  • 举报
回复
AnsiString s="34 45 55 67";
TStringList *sg = new TStringList;
sg->DelimitedText = s;
sg->Delimiter = ' ';
int m[4];
for(int i = 0; i < sg->Count; i++)
{
m[i] = sg->Strings[i].ToInt();
}
delete sg;
for(int i = 0; i < sg->Count; i++)
{
ShowMessage(m[i]);
}

上面的這個分割方法很常見 不過應該還有更簡單的方法
zhangchunge 2009-04-08
  • 打赏
  • 举报
回复
对啊,1楼的有问题
jame2001 2009-04-08
  • 打赏
  • 举报
回复
1樓的3行程式, 就錯了2個地方...
fairchild811 2009-04-08
  • 打赏
  • 举报
回复
1楼的方法应该可行吧,其他的复杂了一点
jame2001 2009-04-08
  • 打赏
  • 举报
回复

int m[1000] ;
AnsiString s="34 45 55 67";
AnsiString s1;
int index = 1;
int mlen = 0;
s1 = s.SubString(index, 2);
index+=3;
while(s1.Length()>0)
{
m[mlen++] = s1.ToInt();
s1 = s.SubString(index, 2);
index+=3;
}
for(int i=0;i<mlen;i++)
Memo1->Lines->Add(m[i]);
mgsg 2009-04-08
  • 打赏
  • 举报
回复
循环读,再给数组符值
周药师 2009-04-08
  • 打赏
  • 举报
回复


int m[1000] ;
AnsiString s="34 45 55 67";
sprintf(m,'%d',s.c_str()) ;

morris88 2009-04-08
  • 打赏
  • 举报
回复

int m[4];
AnsiString s = "34 45 55 67";
sscanf(s.c_str(), "%d %d %d %d", &m[0], &m[1], &m[2], &m[3]);
fairchild811 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Ring_Pt 的回复:]
AnsiString s="34 45 55 67";
TStringList *sg = new TStringList;
sg->DelimitedText = s;
sg->Delimiter = ' ';
int m[4];
for(int i = 0; i < sg->Count; i++)
{
m[i] = sg->Strings[i].ToInt();
}
delete sg;
for(int i = 0; i < sg->Count; i++)
{
ShowMessage(m[i]);
}

上面的這個分割方法很常見 不過應該還有更簡單的方法
[/Quote]


不是CB就不能这样了

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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