VC++6.0里面Spilt函数有吗

时间:2022-09-07 19:16:52
VC++6.0里面Spilt函数有吗?大家帮忙写一个风格字符串的函数吧,函数的返回值是Arraychar[],参数是23123131|2313213123|2313213|232|,分隔符是"|"。还有获取进程和暂停进程的函数,怎么没效果啊,VC里面这2个函数是什么呢。

15 个解决方案

#1


要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD dwDesiredAccess,
  __in          BOOL bInheritHandle,
  __in          DWORD dwProcessId
);
暂停进程?暂停线程吧。
DWORD WINAPI SuspendThread(
  __in          HANDLE hThread
);
将进程中所有线程都暂停就相当于暂停进程吧。



-------------------
MoreWindows 
计科小硕 迅雷/微软/豌豆荚实习生 CSDN资深博客专家 2012年度CSDN博客之星
我的微博: http://weibo.com/MoreWindows
我的博客: http://blog.csdn.net/MoreWindows


#2


VC++6.0里面Spilt函数有吗

#3


引用 1 楼 MoreWindows 的回复:
要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD dwDesiredAccess,
  __……


strtok会改变源字符串的值,这一点觉得很危险。

#4


引用 1 楼 MoreWindows 的回复:
要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD dwDesiredAccess,
  __……

你能不能不要答非所问啊,我问你函数,你叫我看博客;我问你怎么暂停进程,你去叫我暂停进程。

#5


貌似没见过,一般用find()及含有find的函数来找出某个字符或者字符串

#6


引用 1 楼 MoreWindows 的回复:
要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD dwDesiredAccess,
  __……

我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码

Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,3130);
if (strlen(Memoryxx) == 0 )
{
MessageBox("找不到");
SuspendProcess(hwndprocess);
else if (strlen(Memoryxx)>1 )
{
ArrayMemoryxx[10] = Split(Memoryxx, "|");
Memoryx=ArrayMemoryxx(0);

这里是Split函数的定义

CString Split(CString source, CString divKey, CStringArray& dest)
{
    string dest[10];
dest.RemoveAll();
     int pos = 0;
     int pre_pos = 0;
     while( -1 != pos ){
         pre_pos = pos;
         pos = source.Find(division,(pos+1));
         dest.Add(source.Mid(pre_pos,(pos-pre_pos)));
     }
}

return dest;
}

关键是怎么实现这个Memoryx=ArrayMemoryxx(0);Memoryx是一个字符串类型。
另外暂停进程的函数是不是这样的SuspendProcess(hwndprocess);

#7


引用 5 楼 eckael 的回复:
貌似没见过,一般用find()及含有find的函数来找出某个字符或者字符串

我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码

Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,3130);
if (strlen(Memoryxx) == 0 )
{
MessageBox("找不到");
SuspendProcess(hwndprocess);
else if (strlen(Memoryxx)>1 )
{
ArrayMemoryxx[10] = Split(Memoryxx, "|");
Memoryx=ArrayMemoryxx(0);

这里是Split函数的定义

CString Split(CString source, CString divKey, CStringArray& dest)
{
    string dest[10];
dest.RemoveAll();
     int pos = 0;
     int pre_pos = 0;
     while( -1 != pos ){
         pre_pos = pos;
         pos = source.Find(division,(pos+1));
         dest.Add(source.Mid(pre_pos,(pos-pre_pos)));
     }
}

return dest;
}

关键是怎么实现这个Memoryx=ArrayMemoryxx(0);Memoryx是一个字符串类型。
另外暂停进程的函数是不是这样的SuspendProcess(hwndprocess);

#8


引用 3 楼 jxcr1984 的回复:
引用 1 楼 MoreWindows 的回复:要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD……

我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码

Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,3130);
if (strlen(Memoryxx) == 0 )
{
MessageBox("找不到");
SuspendProcess(hwndprocess);
else if (strlen(Memoryxx)>1 )
{
ArrayMemoryxx[10] = Split(Memoryxx, "|");
Memoryx=ArrayMemoryxx(0);

这里是Split函数的定义

CString Split(CString source, CString divKey, CStringArray& dest)
{
    string dest[10];
dest.RemoveAll();
     int pos = 0;
     int pre_pos = 0;
     while( -1 != pos ){
         pre_pos = pos;
         pos = source.Find(division,(pos+1));
         dest.Add(source.Mid(pre_pos,(pos-pre_pos)));
     }
}

return dest;
}

关键是怎么实现这个Memoryx=ArrayMemoryxx(0);Memoryx是一个字符串类型。
另外暂停进程的函数是不是这样的SuspendProcess(hwndprocess);

#9


参考:

The following function returns the first portion of the src param. 

// Portions are delimited by a semi-colon( ; ),
//  a comma( , ), a period( . ), a dash( - ),
// or a colon( : ).

CString GetFirstPart( CString src)
{
    return src.SpanExcluding( ";,.- :");
}

#10


引用 7 楼 liuyang2708 的回复:
引用 5 楼 eckael 的回复:貌似没见过,一般用find()及含有find的函数来找出某个字符或者字符串
我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码C/C++ code?123456789Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,3130);    if (strlen(Memo……

ArrayMemoryxx是不是一个二维数组,是的话可以尝试下Memoryx=ArrayMemoryxx[0]
SuspendThread用过,SuspendProcess没用过,还有sleep()方法可以用下

#11



int SpliteString( LPCTSTR lpszString, const TCHAR *lpszFlag, vector<string> &vectorStr )
{
vectorStr.clear();

if (lpszString && lpszString[0] && lpszFlag && lpszFlag[0])
{
int nSize = _tcslen(lpszString);
int nAddSize = _tcslen(lpszFlag);
TCHAR *lpszBuffer = (TCHAR*)malloc(nSize+ nAddSize +2);//这个空间应该够大了
if (lpszBuffer)
{
memset(lpszBuffer, 0 , nSize+ nAddSize +2);

_tcscpy(lpszBuffer, lpszString);

if (nSize)
{
BOOL bFind = TRUE;
if (nSize > nAddSize)
{
for (int i = 0; i < nAddSize ; i++)
{
if (lpszBuffer[nSize - 1 - i] == lpszFlag[nAddSize - 1 - i])
{
}
else
{
bFind = FALSE;
break;
}
}
}

if (!bFind)
{
_tcscat(lpszBuffer, lpszFlag);
}

TCHAR *pStart = lpszBuffer;
TCHAR *pEnd = _tcsstr(lpszBuffer, lpszFlag);

while (pStart && pEnd && pEnd > pStart && pStart < (lpszBuffer + nSize))
{
*pEnd = _T('\0');

if (pEnd+nAddSize)
{
pEnd += nAddSize - 1;
*pEnd = _T('\0');
}

vectorStr.push_back(pStart);

pStart = ++pEnd;
pEnd = _tcsstr(pStart, lpszFlag);
}
}

free(lpszBuffer);
}
}

return vectorStr.size();
}

#12


引用 10 楼 eckael 的回复:
引用 7 楼 liuyang2708 的回复:引用 5 楼 eckael 的回复:貌似没见过,一般用find()及含有find的函数来找出某个字符或者字符串
我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码C/C++ code?123456789Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,31……


123456789Memoryxx是一个字符串对象。

#13


引用 9 楼 schlafenhamster 的回复:
参考:

The following function returns the first portion of the src param. 

// Portions are delimited by a semi-colon( ; ),
//  a comma( , ), a period( . ), a dash( - ),
// or a colon……

CString里面有返回第二个,第三个.....这样的库函数吗?我这里需要获取多个字符串的类。

#14


引用 11 楼 babala2009 的回复:
int SpliteString( LPCTSTR lpszString, const TCHAR *lpszFlag, vector<string> &amp;vectorStr )
{
vectorStr.clear();

if (lpszString &amp;&amp; lpszString[0] &amp;&amp; lpszFlag &amp;&amp; lpszFlag[0……


太多了,群总表示看不懂;并且我也不知道怎么调用你这个函数。

#15


参考:
CString GetSubString(CString &src)
{
CString sub;
if(src.Find('|')>-1)
{
sub=src.SpanExcvluding("|");
src.Replace(sub+'|',"");// 注意 源串中的子串 被 不断删除。
}
else
{
sub=src;
src="";
}
return sub;
}

调一次 得到一个,直到 源串=“” !

#1


要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD dwDesiredAccess,
  __in          BOOL bInheritHandle,
  __in          DWORD dwProcessId
);
暂停进程?暂停线程吧。
DWORD WINAPI SuspendThread(
  __in          HANDLE hThread
);
将进程中所有线程都暂停就相当于暂停进程吧。



-------------------
MoreWindows 
计科小硕 迅雷/微软/豌豆荚实习生 CSDN资深博客专家 2012年度CSDN博客之星
我的微博: http://weibo.com/MoreWindows
我的博客: http://blog.csdn.net/MoreWindows


#2


VC++6.0里面Spilt函数有吗

#3


引用 1 楼 MoreWindows 的回复:
要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD dwDesiredAccess,
  __……


strtok会改变源字符串的值,这一点觉得很危险。

#4


引用 1 楼 MoreWindows 的回复:
要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD dwDesiredAccess,
  __……

你能不能不要答非所问啊,我问你函数,你叫我看博客;我问你怎么暂停进程,你去叫我暂停进程。

#5


貌似没见过,一般用find()及含有find的函数来找出某个字符或者字符串

#6


引用 1 楼 MoreWindows 的回复:
要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD dwDesiredAccess,
  __……

我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码

Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,3130);
if (strlen(Memoryxx) == 0 )
{
MessageBox("找不到");
SuspendProcess(hwndprocess);
else if (strlen(Memoryxx)>1 )
{
ArrayMemoryxx[10] = Split(Memoryxx, "|");
Memoryx=ArrayMemoryxx(0);

这里是Split函数的定义

CString Split(CString source, CString divKey, CStringArray& dest)
{
    string dest[10];
dest.RemoveAll();
     int pos = 0;
     int pre_pos = 0;
     while( -1 != pos ){
         pre_pos = pos;
         pos = source.Find(division,(pos+1));
         dest.Add(source.Mid(pre_pos,(pos-pre_pos)));
     }
}

return dest;
}

关键是怎么实现这个Memoryx=ArrayMemoryxx(0);Memoryx是一个字符串类型。
另外暂停进程的函数是不是这样的SuspendProcess(hwndprocess);

#7


引用 5 楼 eckael 的回复:
貌似没见过,一般用find()及含有find的函数来找出某个字符或者字符串

我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码

Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,3130);
if (strlen(Memoryxx) == 0 )
{
MessageBox("找不到");
SuspendProcess(hwndprocess);
else if (strlen(Memoryxx)>1 )
{
ArrayMemoryxx[10] = Split(Memoryxx, "|");
Memoryx=ArrayMemoryxx(0);

这里是Split函数的定义

CString Split(CString source, CString divKey, CStringArray& dest)
{
    string dest[10];
dest.RemoveAll();
     int pos = 0;
     int pre_pos = 0;
     while( -1 != pos ){
         pre_pos = pos;
         pos = source.Find(division,(pos+1));
         dest.Add(source.Mid(pre_pos,(pos-pre_pos)));
     }
}

return dest;
}

关键是怎么实现这个Memoryx=ArrayMemoryxx(0);Memoryx是一个字符串类型。
另外暂停进程的函数是不是这样的SuspendProcess(hwndprocess);

#8


引用 3 楼 jxcr1984 的回复:
引用 1 楼 MoreWindows 的回复:要分割可以用strtok呀。我刚刚发表了一篇博客《strtok源码剖析 位操作与空间压缩》
http://blog.csdn.net/morewindows/article/details/8740315


获取进程
HANDLE WINAPI OpenProcess(
  __in          DWORD……

我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码

Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,3130);
if (strlen(Memoryxx) == 0 )
{
MessageBox("找不到");
SuspendProcess(hwndprocess);
else if (strlen(Memoryxx)>1 )
{
ArrayMemoryxx[10] = Split(Memoryxx, "|");
Memoryx=ArrayMemoryxx(0);

这里是Split函数的定义

CString Split(CString source, CString divKey, CStringArray& dest)
{
    string dest[10];
dest.RemoveAll();
     int pos = 0;
     int pre_pos = 0;
     while( -1 != pos ){
         pre_pos = pos;
         pos = source.Find(division,(pos+1));
         dest.Add(source.Mid(pre_pos,(pos-pre_pos)));
     }
}

return dest;
}

关键是怎么实现这个Memoryx=ArrayMemoryxx(0);Memoryx是一个字符串类型。
另外暂停进程的函数是不是这样的SuspendProcess(hwndprocess);

#9


参考:

The following function returns the first portion of the src param. 

// Portions are delimited by a semi-colon( ; ),
//  a comma( , ), a period( . ), a dash( - ),
// or a colon( : ).

CString GetFirstPart( CString src)
{
    return src.SpanExcluding( ";,.- :");
}

#10


引用 7 楼 liuyang2708 的回复:
引用 5 楼 eckael 的回复:貌似没见过,一般用find()及含有find的函数来找出某个字符或者字符串
我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码C/C++ code?123456789Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,3130);    if (strlen(Memo……

ArrayMemoryxx是不是一个二维数组,是的话可以尝试下Memoryx=ArrayMemoryxx[0]
SuspendThread用过,SuspendProcess没用过,还有sleep()方法可以用下

#11



int SpliteString( LPCTSTR lpszString, const TCHAR *lpszFlag, vector<string> &vectorStr )
{
vectorStr.clear();

if (lpszString && lpszString[0] && lpszFlag && lpszFlag[0])
{
int nSize = _tcslen(lpszString);
int nAddSize = _tcslen(lpszFlag);
TCHAR *lpszBuffer = (TCHAR*)malloc(nSize+ nAddSize +2);//这个空间应该够大了
if (lpszBuffer)
{
memset(lpszBuffer, 0 , nSize+ nAddSize +2);

_tcscpy(lpszBuffer, lpszString);

if (nSize)
{
BOOL bFind = TRUE;
if (nSize > nAddSize)
{
for (int i = 0; i < nAddSize ; i++)
{
if (lpszBuffer[nSize - 1 - i] == lpszFlag[nAddSize - 1 - i])
{
}
else
{
bFind = FALSE;
break;
}
}
}

if (!bFind)
{
_tcscat(lpszBuffer, lpszFlag);
}

TCHAR *pStart = lpszBuffer;
TCHAR *pEnd = _tcsstr(lpszBuffer, lpszFlag);

while (pStart && pEnd && pEnd > pStart && pStart < (lpszBuffer + nSize))
{
*pEnd = _T('\0');

if (pEnd+nAddSize)
{
pEnd += nAddSize - 1;
*pEnd = _T('\0');
}

vectorStr.push_back(pStart);

pStart = ++pEnd;
pEnd = _tcsstr(pStart, lpszFlag);
}
}

free(lpszBuffer);
}
}

return vectorStr.size();
}

#12


引用 10 楼 eckael 的回复:
引用 7 楼 liuyang2708 的回复:引用 5 楼 eckael 的回复:貌似没见过,一般用find()及含有find的函数来找出某个字符或者字符串
我把代码都贴出来,请你帮我看下吧。
这个是调用它的地方的代码C/C++ code?123456789Memoryxx = dm.FindFloat(hwnd,"07589E00-0758A500",3120,31……


123456789Memoryxx是一个字符串对象。

#13


引用 9 楼 schlafenhamster 的回复:
参考:

The following function returns the first portion of the src param. 

// Portions are delimited by a semi-colon( ; ),
//  a comma( , ), a period( . ), a dash( - ),
// or a colon……

CString里面有返回第二个,第三个.....这样的库函数吗?我这里需要获取多个字符串的类。

#14


引用 11 楼 babala2009 的回复:
int SpliteString( LPCTSTR lpszString, const TCHAR *lpszFlag, vector<string> &amp;vectorStr )
{
vectorStr.clear();

if (lpszString &amp;&amp; lpszString[0] &amp;&amp; lpszFlag &amp;&amp; lpszFlag[0……


太多了,群总表示看不懂;并且我也不知道怎么调用你这个函数。

#15


参考:
CString GetSubString(CString &src)
{
CString sub;
if(src.Find('|')>-1)
{
sub=src.SpanExcvluding("|");
src.Replace(sub+'|',"");// 注意 源串中的子串 被 不断删除。
}
else
{
sub=src;
src="";
}
return sub;
}

调一次 得到一个,直到 源串=“” !