该函数搜索表中最长/最短的字符串。我可以对其进行编码和读取,但只要我输入函数void minmax(char *ptab, char **pva, int n)
,它就会跳转到第1行而不是第0行。因此,第一个line[0]
永远不会被读取。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int encodage(char [][50]);
void affichage(char [][50],int);
void minmax (char *,char **,int);
int main()
{
char tab[50][50];
char *va[2];
int n;
n=encodage(tab);
affichage(tab,n);
minmax(&tab[0][50],va,n-1);
printf("\nTest\n");
puts(*va);
fflush(stdin);
puts(*(va+1));
return 0;
}
//Code and Read the table with the encodage and affichage.
void minmax(char *ptab,char **pva,int n)
{
int i;
*pva=ptab;
*(pva+1)=ptab;
ptab=ptab+50;
for(i=1;i<n-1;i++)
{
if(strlen(ptab)>strlen(*(pva+1)))
{
*(pva+1)=ptab;
}
else
{
if(strlen(ptab)<strlen(*(pva)))
{
*(pva)=ptab;
}
}
ptab=ptab+50;
}
}
答案 0 :(得分:0)
tab [0] [50]表示tab [0]中索引为50的元素,而不是tab [0]本身。除此之外,指数50超出范围。如果您喜欢使用printf("%s", ... );
void minmax (char[][50] ,char **,int);
int main()
{
char tab[50][50];
char *va[2];
int n = encodage( tab );
affichage( tab, n );
minmax( tab, va, n ); // <-
printf( "short %s\n", va[0] );
printf( "long %s\n", va[1] );
return 0;
}
如果您想找到最短和最长的字符串,请按以下步骤操作:
您的第一个参数是指向字符串表格的指针。第二个是指向两个结果字符串的指针,第三个是表格中的字符串数量(不是n-1
或其他)。
void minmax(char ptab[][50], char **pva, int n )
// ^^^^^^
{
int i, len0, len1, len;
pva[0]=ptab[0]; // init shortest string with pointer to first string in table
pva[1]=ptab[0]; // init longest string with pointer to first string in
len0 = strlen( pva[0] ); // remember lenght of shortest string
len1 = len0; // remember lenght of longest string
for(i=1;i<n;i++) // iterate from secend string up to last string (1..49 in your case)
{
len = strlen( ptab[i] ); // get length of string with index i
if( len > len1 ) // if lenght is greater than lenght of longest string, then this is longest string
{
len1 = len; // remember new maximum lenght
pva[1]=ptab[i]; // remember new maximum string
}
else if( len < len0 ) // if lenght is less than lenght of shortest string, then this is shortest string
{
len0 = len; // remember new minimum length
pva[0]=ptab[i]; // remember new minimum string
}
}
}