将数组或结果或数组返回到主函数C
嗨,我有一个小功能,从句子中删除这个词,它以2个辅音开头。有以下功能:将数组或结果或数组返回到主函数C,c,C,嗨,我有一个小功能,从句子中删除这个词,它以2个辅音开头。有以下功能: char * fun_zod(char * sak) { char * sep = " "; //Zodziu atskirejas - tarpas char * zodis = strtok(sak,sep); //Nurodome kad sakini suskirstytume i zodzius po viena char * zodmas[20]; int i = 0; z
char * fun_zod(char * sak)
{
char * sep = " "; //Zodziu atskirejas - tarpas
char * zodis = strtok(sak,sep); //Nurodome kad sakini suskirstytume i zodzius po viena
char * zodmas[20];
int i = 0;
zodmas[0] = zodis; //Iraso atskirai kiekviena zodi i masyva
while (zodis != NULL)
{
if (zodis == NULL)
break;
i++;
zodis = strtok(NULL,sep);
zodmas[i] = zodis;
}
int n=i;
for(int j = 0;j < n;j++)
{
if (!( zodmas[j][0] == 'a' || zodmas[j][0] == 'e' || zodmas[j][0] == 'i' || zodmas[j][0] == 'o' || zodmas[j][0] == 'u' ) && !( zodmas[j][1] == 'a' || zodmas[j][1] == 'e' || zodmas[j][1] == 'i' || zodmas[j][1] == 'o' || zodmas[j][1] == 'u' ))
{
zodmas[j]="";
}
}
for (i=0;i < n; i++)
{
printf("%s ", zodmas[i]);
}
}
char*fun_zod(char*sak)
{
char*sep=“”;//Zodziu atskirejas-tarpas
char*zodis=strtok(sak,sep);//Nurodome kad sakini suskirstytum i zodzius po viena
char*zodmas[20];
int i=0;
zodmas[0]=zodis;//伊拉索·阿特斯基拉伊·基克维安·佐迪·马西瓦
while(zodis!=NULL)
{
if(zodis==NULL)
打破
i++;
zodis=strtok(空,sep);
zodmas[i]=zodis;
}
int n=i;
对于(int j=0;j
现在我想把结果返回到main函数,打印结果不是来自函数,而是来自main函数。我知道在C语言中,我不能从函数返回数组。也许有人可以建议我如何将结果返回到主函数?感谢您的帮助将数组从main()函数传递到fun_zod()函数并使用它。
不要在fun_zod中使用数组,在这种情况下,由于临时变量的概念,数组将被清除
例如:
void func(int *a)
{
/* use this array here , and u dont need to send it back, it will be updated in main func also. */
/* change array value here */
a[0] = 7;
}
void main()
{
int arr[10];
func(arr);
/* change will reflect here*/
}
将zodmas和n作为参数传递 添加一个测试以防止zodmas溢出
char * fun_zod(char * sak, int *n, char **zodmas)
{
char * sep = " "; //Zodziu atskirejas - tarpas
char * zodis = strtok(sak,sep); //Nurodome kad sakini suskirstytume i zodzius po viena
int i = 0;
zodmas[0] = zodis; //Iraso atskirai kiekviena zodi i masyva
while (zodis != NULL && i < *n)
{
if (zodis == NULL)
break;
i++;
zodis = strtok(NULL,sep);
zodmas[i] = zodis;
}
*n=i;
for(int j = 0;j < i;j++)
{
if (!( zodmas[j][0] == 'a' || zodmas[j][0] == 'e' || zodmas[j][0] == 'i' || zodmas[j][0] == 'o' || zodmas[j][0] == 'u' ) && !( zodmas[j][1] == 'a' || zodmas[j][1] == 'e' || zodmas[j][1] == 'i' || zodmas[j][1] == 'o' || zodmas[j][1] == 'u' ))
{
zodmas[j]="";
}
}
}
int main(void) {
int n = 20;
char *zodmas[20];
fun_zod(strdup("toto tutu tata"), &n, zodmas);
for (int i=0;i < n; i++)
{
printf("%s ", zodmas[i]);
}
return 0;
}
char*fun\u zod(char*sak,int*n,char**zodmas)
{
char*sep=“”;//Zodziu atskirejas-tarpas
char*zodis=strtok(sak,sep);//Nurodome kad sakini suskirstytum i zodzius po viena
int i=0;
zodmas[0]=zodis;//伊拉索·阿特斯基拉伊·基克维安·佐迪·马西瓦
while(zodis!=NULL&&i<*n)
{
if(zodis==NULL)
打破
i++;
zodis=strtok(空,sep);
zodmas[i]=zodis;
}
*n=i;
对于(int j=0;j
返回数组
在结构中
我不建议这样做,但您可以将数组打包到结构中并返回该结构:
结构a{
char*x[30];
};
构造一个foo()
{
结构a b={};
返回b;
}
int
main(int argc,char*argv[])
{
结构a、f;
f=foo();
返回0;
}
返回指针
可以返回指向数组开头的指针
char**
foo()
{
字符**数组;
array=calloc(30,sizeof*array);
返回数组;
}
阵列的长度可以通过各种方式进行通信:
NULL
,调用函数可以通过检查NULL
来确定数组的长度char**
foo(int*n)
{
字符**数组;
*n=数组的随机长度
array=calloc(30,sizeof*array);
返回数组;
}
int
main(int argc,char*argv[])
{
字符**a;
整数长度;
a=foo(&length);
...
免费(a);
...
strncpy
和memcpy
就是这样工作的。\define MAXLINES 1000//global
#define MAXLINES 1000 //global
main()
{
char *lineptr[MAXLINES]; /*pointers to lines*/
//....//
for(i=0; i< nlines; i++)
printf("%s\n", lineptr[i] );
}
int fun_zod(char * sak , char *lineptr[])
{
int len, nlines=0; // String lenght and number of lines
char *p;
char * sep = " "; //Zodziu atskirejas - tarpas
char * zodis = strtok(sak,sep); //Nurodome kad sakini suskirstytume i zodzius po viena
char * zodmas[20];
int i = 0;
zodmas[0] = zodis; //Iraso atskirai kiekviena zodi i masyva
while (zodis != NULL)
{
if (zodis == NULL)
break;
i++;
zodis = strtok(NULL,sep);
zodmas[i] = zodis;
}
int n=i;
for(int j = 0;j < n;j++)
{
if (!( zodmas[j][0] == 'a' || zodmas[j][0] == 'e' || zodmas[j][0] == 'i' || zodmas[j][0] == 'o' || zodmas[j][0] == 'u' ) && !( zodmas[j][1] == 'a' || zodmas[j][1] == 'e' || zodmas[j][1] == 'i' || zodmas[j][1] == 'o' || zodmas[j][1] == 'u' ))
{
zodmas[j]="";
}
}
for (i=0;i < n; i++)
{
len = strlen(&zodmas[i]);
p= malloc(sizeof (char *) * len);
strcpy(p, &line[i]);
lineptr[nlines++] = p;
}
return nlines;
}
main()
{
char*lineptr[MAXLINES];/*指向行的指针*/
//....//
对于(i=0;i#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isvowel(int ch)
{
char *vowels = "AEIOUaeiou";
return (strchr(vowels, ch) != NULL);
}
void free_zod(char **zod)
{
int i = 0;
while (zod[i] != NULL)
free (zod[i++]);
free (zod);
}
char **fun_zod(char * sak)
{
char *sep = " \r\n\t"; // weed out tabs and newlines too
char *zodis;
char **zodmas = NULL;
int i = 0, len;
zodmas = malloc(sizeof(char*));
zodmas[0] = NULL; // end marker
zodis = strtok(sak,sep);
while (zodis != NULL)
{
len = strlen(zodis);
if (!isvowel(zodis[0]) && !isvowel(zodis[1]) && strlen(zodis)>=2)
{
zodis = "";
len = 0;
}
zodmas = realloc(zodmas, (i+2) * sizeof(char*));
zodmas[i] = malloc(len+1); // string space
strcpy(zodmas[i], zodis);
zodmas[++i] = NULL; // end marker
zodis = strtok(NULL,sep); // next token
}
return zodmas;
}
int main (void)
{
char **zod;
char input[201];
int i = 0;
if (fgets(input, 200, stdin) == NULL)
return 0;
zod = fun_zod(input); // get array pointer
while (zod[i] != NULL) // NULL is ends marker
printf("%s\n", zod[i++]);
free_zod(zod);
return 0;
}
one two three four five six seven eight nine ten eleven twelve
one
four
five
six
seven
eight
nine
ten
eleven