如何快速分隔一个字符串,并将分隔后的数个串放到一个指针数组中

horicon 2011-08-17 06:59:40
比如源串为"aa,bb,cc,dd,..."

如何将它存成
argv[0]="aa"
argv[1]="bb"
argv[2]="cc"
argv[3]="dd"

源串长度不定,分隔后,数组元素多少也不定,用C语言怎么解决,求助各位大神
...全文
198 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongwenjun 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhao4zhong1 的回复:]

C/C++ code
#include <stdio.h>
#include <string.h>
char s[]="aa,bb,cc,dd,...";
int argc,i;
char *argv[100];
void main() {
argc=0;
argv[argc]=strtok(s,",");
while (1) {
if (NULL==a……
[/Quote]
+++

char s[]="aa,bb,cc,dd,...";
int argc,i;
char *argv[100];
int main() 代码测试可以这样
实际使用 可以方便
改成成 int main(int argc ,char *argv[])
xxmv99 2011-08-18
  • 打赏
  • 举报
回复
strtok似乎不满足楼主的要求
jason-xu 2011-08-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>   
#include <stdlib.h>

typedef struct tagStrlist
{
char* str;
struct tagStrlist* pNext;
}StrList;

void FreeList(StrList* pList)
{
StrList* ptmpList = NULL;
while(pList)
{
ptmpList = pList;
pList = ptmpList->pNext;
if(ptmpList->str)
{
free(ptmpList->str);
}
free(ptmpList);
}
}

StrList* Resolve(char* str, char* dot)
{
char* p;
StrList *pnode;
StrList *ptmpList = NULL;
StrList *pList = NULL;
p = strtok(str, dot);
if (p)
{
if((pnode = (StrList*)malloc(sizeof(StrList))) == NULL)
{
printf("malloc pnode faild\n");
goto err;
}

if((pnode->str = (char*)malloc(strlen(p) + 1)) == NULL)
{
printf("malloc str faild\n");
goto err;
}
strcpy(pnode->str, p);
pnode->pNext = NULL;
ptmpList = pnode;
pList = pnode; //保存头结点
}

while((p = strtok(NULL, ",")) != NULL)
{
if((pnode = (StrList*)malloc(sizeof(StrList))) == NULL)
{
printf("malloc pnode faild\n");
goto err;
}

if((pnode->str = (char*)malloc(strlen(p) + 1)) == NULL)
{
printf("malloc str faild\n");
goto err;

}
strcpy(pnode->str, p);
pnode->pNext = NULL;
ptmpList->pNext = pnode;
ptmpList = pnode;
}
return pList;

err:
FreeList(pList);
return NULL;

}
int main(void)
{
StrList* pList;
StrList* ptmpList;
char buf[200] = "aaa,bbb,ccc,ddd,eee,fff,ggg,kkk,dfafda,fafoei,fdadfafd,qewqef";
pList = Resolve(buf, ",");

ptmpList = pList;
while(ptmpList)
{
printf("%s\n", ptmpList->str);
ptmpList=ptmpList->pNext;
}
}
基于链表的简单实现
AnYidan 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jernymy 的回复:]
使用strtok针对,做分割。
使用malloc分配内存区域。
如果做成链表会很方便
typedef struct tagList
{
char *pchStr; // 用于malloc
struct tagList *ptNext; // 指向下一个
}TList;
[/Quote]

我喜欢指针数组
AnYidan 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jernymy 的回复:]
使用strtok针对,做分割。
使用malloc分配内存区域。
如果做成链表会很方便
typedef struct tagList
{
char *pchStr; // 用于malloc
struct tagList *ptNext; // 指向下一个
}TList;
[/Quote]

我更喜欢用指针数组
赵4老师 2011-08-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
char s[]="aa,bb,cc,dd,...";
int argc,i;
char *argv[100];
void main() {
argc=0;
argv[argc]=strtok(s,",");
while (1) {
if (NULL==argv[argc]) break;
argc++;
if (argc>=100) break;
argv[argc]=strtok(NULL,",");
}
for (i=0;i<argc;i++) {
printf("argv[%d] \"%s\"\n",i,argv[i]);
}
}
//argv[0] "aa"
//argv[1] "bb"
//argv[2] "cc"
//argv[3] "dd"
//argv[4] "..."
赵4老师 2011-08-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
char s[]="aa,bb,cc,dd,...";
int argc,i;
char *argv[100];
void main() {
argc=0;
argv[argc]=strtok(s,",");
while (1) {
if (NULL==argv[argc]) break;
argc++;
if (argc>=100) break;
argv[argc]=strtok(NULL,",");
}
for (i=0;i<argc;i++) {
printf("argv[%d] \"%s\"\n",i,argv[i]);
}
}
//argv[0] "aa"
//argv[1] "bb"
//argv[2] "cc"
//argv[3] "dd"
//argv[4] "..."
赵4老师 2011-08-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
char s[]="aa,bb,cc,dd,...";
int argc,i;
char *argv[100];
void main() {
argc=0;
argv[argc]=strtok(s,",");
while (1) {
if (NULL==argv[argc]) break;
argc++;
if (argc>=100) break;
argv[argc]=strtok(NULL,",");
}
for (i=0;i<argc;i++) {
printf("argv[%d] \"%s\"\n",i,argv[i]);
}
}
//argv[0] "aa"
//argv[1] "bb"
//argv[2] "cc"
//argv[3] "dd"
//argv[4] "..."
暮雨晨舟 2011-08-17
  • 打赏
  • 举报
回复
strtok 没使用过~
luciferisnotsatan 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 demon__hunter 的回复:]

strtok
new char*[n]
[/Quote]
++

用strtok分割
jernymy 2011-08-17
  • 打赏
  • 举报
回复
使用strtok针对,做分割。
使用malloc分配内存区域。
如果做成链表会很方便
typedef struct tagList
{
char *pchStr; // 用于malloc
struct tagList *ptNext; // 指向下一个
}TList;
Ailoverer 2011-08-17
  • 打赏
  • 举报
回复
把字符串写进文本中 fseek读 指针移动 和strcmp(‘,’,)进行比较 匹配成功就读取换另一个数组存储
fthislife 2011-08-17
  • 打赏
  • 举报
回复
看看下面这个:

#include<stdio.h>
#include<malloc.h>
#define OUT
int func(char OUT ***pp,char *p,char c,int *maxlen)
{
int num=0,i,j=0,temp=0,temp1=temp;
char *s=p,char **ppp=NULL;
for(;*s!='\0';s++)
{
while(*s!=c&&*s!='\0')
{
temp1++;
s++;
}
if(temp<=temp1)
temp=temp1;
temp1=0;
if(*s==c)
num++;
}
ppp=(char**)malloc(sizeof(char*)*num);
for(i=0;i<=num;i++)
ppp[i]=(char*)malloc(sizeof(char)*(temp+1));
s=p;
for(i=0;i<=num;i++)
{
for(j=0;j<temp&&*s!='\0'&&*s!=c;s++,j++)
{
ppp[i][j]=*s;
}
ppp[i][j]='\0';
s++;
}
*pp=ppp;
*maxlen=temp;
return num+1;
}
void main()
{
char a[]="aa,bb,ccc111,dd,dddd111",**p;
int i,t,num=func(&p,a,',',&t);
for(i=0;i<num;i++)
{
printf("%s\n",p[i]);
}
}
机智的呆呆 2011-08-17
  • 打赏
  • 举报
回复
strtok
new char*[n]
horicon 2011-08-17
  • 打赏
  • 举报
回复
怎么没人啊

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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