如何将字符串字存储在数组中(以便以后我可以反转它们)??在C中
我的代码是这样的如何将字符串字存储在数组中(以便以后我可以反转它们)??在C中,c,string,C,String,我的代码是这样的 int i=0,j=0,k=0; char *a[20]; int count=0; for(i=0;i<20;i++) { a[i] = malloc(50 * sizeof(char)); } i=0; while(*(p+i)!='\n') { int k=0; while(*(p+i)!=' ') { *(a[j]+k)=*(p+i); i++; k++; }
int i=0,j=0,k=0;
char *a[20];
int count=0;
for(i=0;i<20;i++)
{
a[i] = malloc(50 * sizeof(char));
}
i=0;
while(*(p+i)!='\n')
{
int k=0;
while(*(p+i)!=' ')
{
*(a[j]+k)=*(p+i);
i++;
k++;
}
*(a[j]+k)='\0';
i++;
j++;
}
printf("\n Count%d",j);
count=j;
for(j=0;j<count;j++)
{
printf("%s",a[j]);
printf("\n \n ");
}
}
inti=0,j=0,k=0;
char*a[20];
整数计数=0;
对于(i=0;i您没有说明您的代码是否实际工作。是否有问题,或者您只是在询问代码的注释?如果有任何单词超过49个字符,您的代码将失败
您可以改为使用库函数strtok()将字符串分解为标记/单词。比strtok&Co“更好”请参见以下内容:
int strsplit(const char *s,char ***l,char t)
{
int r=0;
while( strchr(s,t) )
{
*l=realloc(*l,++r*sizeof*l);
memcpy((*l)[r-1]=calloc(1,strchr(s,t)-s+1),s,strchr(s,t)-s);
s=strchr(s,t)+1;
}
*l=realloc(*l,++r*sizeof*l);
memcpy((*l)[r-1]=calloc(1,strlen(s)+1),s,strlen(s));
return r;
}
int main()
{
char **l=0,*x="1;2;;4";
int i,r=strsplit(x,&l,';');
for(i=0;i<r;++i)
{
puts(l[i]);
free(l[i]);
}
free(l);
return 0;
}
int strsplit(常量字符*s,字符***l,字符t)
{
int r=0;
while(strchr(s,t))
{
*l=realloc(*l,+r*sizeof*l);
memcpy((*l)[r-1]=calloc(1,strchr(s,t)-s+1),s,strchr(s,t)-s;
s=strchr(s,t)+1;
}
*l=realloc(*l,+r*sizeof*l);
memcpy((*l)[r-1]=calloc(1,strlen(s)+1),s,strlen(s));
返回r;
}
int main()
{
字符**l=0,*x=“1;2;4”;
int i,r=strsplit(x,&l,“;”);
对于(i=0;我是否明确禁止您使用strtok()
?将字符串存储在数组中?将字符串拆分为多个字符串不是更好的做法吗?您上面的代码除了非常不可读之外,从不定义p
。此外,sizeof(char)
不是必需的。@约翰:有些体系结构实际上“sizeof(char)!=1”。@onemasse:C99定义了隐式,即sizeof(char)==1,请参见6.5.3.4。char_位不能是8,但这是另一个问题。strtok破坏字符串,strtok不在多线程中工作,strtok切换空字,如“1;2;;4”->“1”、“2”、“4”而不是“1”,"2","","4"