关于网友提出的“ 请问,如何分解字符串数组?”问题疑问,本网通过在网上对“ 请问,如何分解字符串数组?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 请问,如何分解字符串数组?
描述: 如:已知字符串数组
char *p[]={"aaaa-bb-cccc","dddd-ee-ffff","gggg-hhh-jjjj"};
然后,我需要生成新的数组
str1="aaaa";
str2="bb";
str3="cccc";
str4="dddd";
......//后面的一样
我想这个问题,应该比较简单吧?我想了一下,用查找字符串的办法好象可以做到,但是,具体我的代码写不好,我想应该有什么函数能解决此类型的问题吧?
解决方案1: 回:
比如说,我的程序需要使用命令行参数如:
myapp -d 1983-5-23 -ip 127.0.0.1
myapp -d 1983-04-27 -ip 255.255.255.255
把日期和ip地址加进去。
加到哪里?用参数数组不就行了?日期就像前面所说的那样分解,至于IP嘛。也用那样的方法不就行了?
解决方案2: 说明一下,我上面只做了一个串的分割,但是相信其他的就不用再写了吧,也可以把后面的代码做成一个函数,把字符串常量拷贝出来以后,分别调用函数就可以了.
解决方案3: 其实我觉得要是使用库函数的话,strtok是最适合的了.只不过strtok会改变原来串的结构,所以需要重新将char *p[]里面的字符串拷贝出去,下面我的代码:
#include
#include
#include
char *p[]={"aaaa-bb-cccc","dddd-ee-ffff","gggg-hhh-jjjj"};
int main()
{
int len;
char *delimiter="-"; //分隔字符串,这里只有一个
char *token;
char *string1;
len=strlen(p[0]);
string1=(char *) malloc((len+1)*sizeof(char));
strcpy(string1,p[0]);
token=strtok(string1,delimiter);
while(token!=NULL)
{
printf("%s\n",token);
token=strtok(NULL,delimiter);
}
free(string1);
return 0;
}
解决方案4: 最保守的代码:
#define FILL(x) x=new char[i-j+1];if(!x) return 1;strncpy(x,vg+j,i-j);x[i-j\
]='\0;j=i+1;flag++;
for(int i=0,j=1,flag=0,len=strlen(vg);i<>
if(vg[i]=='-'||!vg[i])
switch(flag)
{
case 0:FILL(y);break;
case 1:FILL(m);break;
case 2:FILL(d);break;
default:return 1;
}
还有一种:
char* begin=strchr(vg,'-');
char* end=strrchr(vg,'-');
y=new char[begin-vg+1];
strncpy(y,vg,begin-vg);
y[begin-vg]='\0';
m=new char[end-begin];
strncpy(m,vg+(begin-vg)+1,end-begin-1);
m[end-begin-1]='\0';
d=new char[strlen([vg+(end-vg)+1)];
strcpy(d,vg+(end-vg)+1);
两个都刚好十行。都是一步步赋值的。很烦吧?还是用sscanf吧。不过这个我没试过。
解决方案5: 需求不明,做出来的函数就没有普遍性,不可重用的话,做起来就没什么意思了。
首先是输入的字符串的格式和大小?
其次是输出的问题,你需要保存到字符串中还是只需要输出一下就可以了?这问题牵涉到变量的定义和内存的分配。
基本上使用strchar()函数或者循环查找都是很简单的事
解决方案6: 我觉得你还是用比较编程法好就拿前一个跟后一个比较这样子不管应用在什么方面都不会有问题的要
不然一定要一个"-"才输出那以后编出来的程序是不是别人一定要这样子做呢这样大大不方便用户了
你要考虑用户不是给自己用更多的想到别人而不是自己编程这样才能有更好的思路!这些方式看起来
简单但你所想到的可没那么多!要切记程序不仅给自己用更要为人家编这样有助于你的思维提高!
解决方案7: sscanf( );
sscanf("xxxx-yy-zz",“%s-%s-%s",s1,s2,s3);
你会得到:
s1 = "xxxx";
s2 = "yy";
s3 = "zz";
解决方案8: 首先建议先将已知字符串数组改为
char *p[]={"aaaa-bb-cccc","dddd-ee-ffff","gggg-hhh-jjjj",0};
那么可以这样来完成
定义字符串数组strs[]
然后用
...
i=0;
while(p[i++])
sscanf(p[i]," %[^-]%*[-]%[^-]%*[-]%s",strs[i*3-3,i*3-2,i*3-1);
...
解决方案9: 用函数strchr,原型:char *strchr(char *s, int c);
ptr = strchr(p[0],‘_')
以上介绍了“ 请问,如何分解字符串数组?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3280850.html