CString str(" abc sdjh s he wei e s sss asdf ");
把这个字符串中的abc呀那些都提起!
可以存到 char Read[]中void ReadStr(char Read[],CString str)
{
memset(Read,0,sizeof(Read));
int j = 0;
if(str.GetLength() == 0)
return;
for(int i = 0;i<str.GetLength();++i)
{
if(str.GetAt(i) == 32)
{
strcpy(&Read[j],str.Left(i));
TRACE("%s\n",&Read[j]);
j++;
for(int p = 0;p<str.GetLength();++p)
{
int k = i+1;
if(str.GetAt(k) == 32)
str = str.Right(str.GetLength()-1);
else
break;
k++;
}
str = str.Right(str.GetLength()-i-1);
i = 0;
}
}
strcpy(&Read[j+1],str);
TRACE("%s\n",&Read[j+1]);
}我单个的TRACE都是正确的而在最后一行,TRACE("%s\n",&Read[j+1]);
后面再来打前面的就不可以了TRACE("%s\n",&Read[0]);
我知道我写的好乱,呵呵
大家帮忙哦
把这个字符串中的abc呀那些都提起!
可以存到 char Read[]中void ReadStr(char Read[],CString str)
{
memset(Read,0,sizeof(Read));
int j = 0;
if(str.GetLength() == 0)
return;
for(int i = 0;i<str.GetLength();++i)
{
if(str.GetAt(i) == 32)
{
strcpy(&Read[j],str.Left(i));
TRACE("%s\n",&Read[j]);
j++;
for(int p = 0;p<str.GetLength();++p)
{
int k = i+1;
if(str.GetAt(k) == 32)
str = str.Right(str.GetLength()-1);
else
break;
k++;
}
str = str.Right(str.GetLength()-i-1);
i = 0;
}
}
strcpy(&Read[j+1],str);
TRACE("%s\n",&Read[j+1]);
}我单个的TRACE都是正确的而在最后一行,TRACE("%s\n",&Read[j+1]);
后面再来打前面的就不可以了TRACE("%s\n",&Read[0]);
我知道我写的好乱,呵呵
大家帮忙哦
我不想去想了 我现在想要一个程序:
CString str(" abc sdjh s he wei e s sss asdf ");
把这个字符串中的abc呀那些都提起!
可以存到 char Read[]中
(不管他们中间有多少个空格)大家能不能给我一个程序!!!!!!!!!!!!!!!!!!!!!!!!!!!分不够就加
void ReadStr(TCHAR Read[],CString str)
{
str.Replace( " ", "" ) ;
memset( Read, 0, sizeof(Read) ) ;
_tcsncpy( Read, str ) ;
}
void ReadStr(TCHAR Read[],CString str)
{
str.Replace( " ", "" ) ;
memset( Read, 0, sizeof(Read) ) ;
_tcsncpy( Read, str, sizeof(Read)/sizeof(TCHAR) - 1 ) ;//第三参数是缓冲区允许的字符数.
}
sizeof(Read)得到的是指针的大小而不是缓冲区的大小.可以用_tcscpy不管大小直接复制,但有访问违规的可能性.或在参数中指定缓冲区可存字符数:
void ReadStr(TCHAR Read[], int nLen, CString str)
{
str.Replace( " ", "" ) ;
memset( Read, 0, sizeof(Read) ) ;
_tcsncpy( Read, str, nLen ) ;
}
Read = (char *)(str.Remove(' '));
谢谢楼上的
我可能少说了一点
我想的是
char Read[0] 存 abc;
char Read[1] 存 sdjh;
char Read[2] 存 sh;
char Read[3] 存 e; ........
而不是“abcsdjh...”这样一个个的提起来
我不能输入一个长度,因为长度是不定的,我是可以得到str长度
其实我是以空格为标识来读取的,
可能得到read数组长度为2,也可能为12
呵呵
str.Replace( " ", "" ) ;的结果应该会让str变成
"\0\0\0abc\0\0\0sdjh\0s\0he\0\0wei\0e\0s\0\0sss\0asdf\0"
吧?是不是应该
str.Replace( " ", NULL);
还是两者没有区别?
这样来:
int i=0
str.TrimLeft();
str.TrimRight();
while (!str.IsEmpty())
{
CString temp = str.Left(str.Find(' '));
Read[i] = (char *)temp;
i++;
str = str.Right(str.Find(' '));
str.TrimLeft();
str.TrimRight();
}
{
TCHAR *string = new TCHAR( sizeof(TCHAR)*str.GetLength() ) ;
_tcscpy( string, str ) ;
TCHAR seps[] = _T(" ,\t\n");//可能的中分隔符.如仅是空格,则删除其它的.
LPTSTR token; token = _tcstok( string, seps );
int i = 0 ;
while( token != NULL )
{
_tcscpy( abc[i++], token );
TRACE( " %s\n", token );
token = strtok( NULL, seps );
}
delete[] string ;
}
void TEST()
{
CString str(" abc sdjh s he wei e s sss asdf ");
TCHAR *aaa[10] ;
for( int i = 0 ; i < 10 ; ++ i )
aaa[i] = new TCHAR[128] ;
ReadStr( aaa, str ) ;
for( int i = 0 ; i < 10 ; ++ i )
delete[] aaa[i] ;
}
str.Replace( " ", "" ); 的结果是:
str == "abcsdjhsheweiessssasdf"
TCHAR *string = new TCHAR( sizeof(TCHAR)*(str.GetLength() + 1 ) ) ;
但
我要的是abc 作一个串,sdjh也作一个串等等,存在一个数组中
而不是把中间的空格去了
你的上一个程序,没有报错,但到 token = strtok( NULL, seps );
就断了
str.TrimLeft();
str.TrimRight();
while (!str.IsEmpty())
{
CString temp = str.Left(str.Find(' '));
Read[i] = (char *)temp;
i++;
str = str.Right(str.Find(' '));
str.TrimLeft();
}
注意,Read要声明为char的数组指针或者儿重指针
int ReadStr( char *abc[], CString str )
{
TCHAR string[1024] ;
_tcscpy( string, str ) ;
TCHAR seps[] = _T(" ,\t\n");//¿ÉÄܵÄÖзָô·û.Èç½öÊÇ¿Õ¸ñ,Ôòɾ³ýÆäËüµÄ.
LPTSTR token; token = _tcstok( string, seps );
int i = 0 ;
while( token != NULL )
{
_tcscpy( abc[i++], token );
TRACE( " %s\n", token );
token = _tcstok( NULL, seps );
}
return i ;
}
但,到str = str.Right(str.Find(' '));就有一点问题了
呵呵
我还在看看谢谢大家
但是如果你要动态的数组大小的话,就要多费点功夫了
还有就是CString可以强制转换为char *类型的,没问题。
二:str = str.Right(str.Find(' '));
-》str = str.Right(str.GetLength()-str.Find(' '));
三:while (!str.IsEmpty())
一直为真第三个不知道怎么办其实我想用动态的声明,
str = str.Right(str.GetLength() - str.Find(' ') - 1);try again
str.TrimLeft();
str.TrimRight();
while (j != -1)
{
j = str.Find(' ');
CString temp = str.Left(j);
// Read[i] = (char *)temp;
i++;
if (j != -1)
str = str.Right(str.GetLength() - j -1);
str.TrimLeft();
}
int i = 0, j = 0;
str.TrimLeft();
str.TrimRight();
while (j != -1)
{
j = str.Find(' ');
CString temp = str.Left(j);
Read.Add(temp);
i++;
if (j != -1)
str = str.Right(str.GetLength() - j -1);
str.TrimLeft();
}
void ReadStr(CString res[],CString str)
{
int index=0;
if(str.IsEmpty()&&str.Find(' ')!=-1)
;
else
{
for(int i=0;i<str.GetLength();i++)
{
if(str.GetAt(i)!=0x20)
{
for(int j=i;j<str.GetLength();j++)
{
if(str.GetAt(j)==0x20)
{
res[index]=str.Mid(i,j-i);
i=j;
index++;
break;
}
}
}
}
}
}
int main()
{
CString str(" abc def ghi jkl 123 ");
CString res[20]; ReadStr(res,str);
TRACE("%s\n",res[0]);
TRACE("%s\n",res[1]);
TRACE("%s\n",res[2]);
return 0;
}呵呵,效率不好
但得到了谢谢大家
结贴啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!1