字符串拷贝,高分送!!
char szNameString={"aa ss dd ff"};
char *szName[3]={0};
我要把第一行里面的字符串拷贝到第二行的数组里面,最后结果是
szName[0]={"aa"};
szName[1]={"ss"};
szName[2]={"dd"};
szName[3]={"ff"};
就是忽略其中的空格,把其他的字符串放到另外一个数组里面,怎么办?
问题点数:80、回复次数:14Top
1 楼ybt631(默默耕耘!)回复于 2005-04-03 16:20:43 得分 0
数组大小为3,怎末出来了4个元素??Top
2 楼windowssky()回复于 2005-04-03 16:31:51 得分 0
1
char szNameString={"aa ss dd ff"};//这个我看不懂,第一次看到这种写法
2 自己写个算法步骤:
遍历szNmaeString 把空格去掉,去掉的同时记录空格位置,放在数组中
然后读szNmaeString中的字符(现在没有空格了),读取字符,和数组的位置比较就行了
Top
3 楼AthlonxpX86(一坨屎)回复于 2005-04-03 16:33:11 得分 0
数组大小为3,怎末出来了4个元素??
//////////////////
不但如此,每个单位居然能存两个字节,真搞不懂Top
4 楼windowssky()回复于 2005-04-03 16:38:42 得分 0
还有怎么能这样表示呢??
szName[0]={"aa"}; --》szName[0]="aa";
szName[1]={"ss"};
szName[2]={"dd"};
szName[3]={"ff"};
Top
5 楼woodwoodwood3()回复于 2005-04-03 17:06:50 得分 10
这是很基本的操作,也许这样就可以吧:(没有测试,也许会有错)
char *szNameString="aa ss dd ff";
char *szName;
int len=strlen(szNameString);
szName=(char*)calloc( len, sizeof(char));
char m_c=0x00;
int start=0;
int index=0;
for (int i=0;i<len;i++)
{
m_c=*(szNameString+i);
if (m_c==0x20)
{
strncpy(szName+index,szNameString+start,i-start);
index++;
start=i+1;
}
}Top
6 楼keiy()回复于 2005-04-03 17:33:26 得分 50
用我最爱用的strtok
#include <stdio.h>
#include <string.h>
void main()
{
char szNameString[]={"aa ss dd ff"};
char *szName[4]={0};
char *token;
int i;
i=0;
// 以下,szName只是指向原szNameString,没有拷贝
//如果用拷贝,只要先申请内存,然后用strcpy
token = strtok( szNameString, " " );
while( token != NULL )
{
szName[i++]=token ;
token = strtok( NULL, " ");
}
//输出
for(i=0;i<4;i++)
printf("szName[%d]=%s\n" ,i ,szName[i]);
}
Top
7 楼marxixing(天蝎)回复于 2005-04-04 10:55:26 得分 0
楼上高人啊,真是惭愧,我第一次用strtok函数。可不可以教个朋友?我的邮箱marxixing@tom.comTop
8 楼Aerith(艾莉斯)回复于 2005-04-04 11:27:08 得分 0
strtok,不错啊,又学了一招~~
谢谢keiy()Top
9 楼xuzheng318(忧郁王子)回复于 2005-04-04 11:29:29 得分 0
帮楼主顶!Top
10 楼bobob(静思)回复于 2005-04-04 11:34:56 得分 0
CString s="aaa bbb ccc ddd";
char a1[4],a2[4],a3[4],a4[4];
sscanf(s,"%[^ ] %[^ ] %[^ ] %[^ ]",a1,a2,a3,a4);
AfxMessageBox(a4);Top
11 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-04 12:11:21 得分 0
或直接查找空格,然后截取Top
12 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-04 12:11:25 得分 0
或直接查找空格,然后截取Top
13 楼xqk(夏乾坤)回复于 2005-04-04 12:30:12 得分 10
这个问题很简单的嘛,用标准C函数不就行了嘛
char szNameString={"aa ss dd ff"};
char *szName[3]={0};
memset(szName,'\0',3);
strncpy(szNameString,szName,2); //szName is "aa"
memset(szName,'\0',3);
strncpy(szNameString+3,szName,2); //szName is "ss"
memset(szName,'\0',3);
strncpy(szNameString,szName+6,2); //szName is "dd"
Top
14 楼qrlvls( 空 气 )回复于 2005-04-04 12:47:30 得分 10
首先有一个问题:szName是指针数组,保留空间为0
另外一个问题:szName只有三个,而你却用了4个
可以这样做
char szName[4][_MAXPATH];
_stscanf(szNameString, _T("%s %s %s %s"), szName[0], szName[1], szName[2], szName[3]);Top




