C语言指针数组:编译0错误,但无输出结果,是哪里错了?

对题中要求的指针数组不太了解,不知道代码哪里出了问题。

在所给的10个单词中找出不包含元音字母(a,e,i,o,u)的单词,将符合条件的单词的个数以及这些单词按ASCII字典顺序输出。    
⑴ 编写函数int FindNoVowel(char *str[],int num,char res[][20]),str指向的指针数组中保存若干单词字符串的首地址,num保存单词的个数,res指向的数组保存找到的符合条件的单词字符串,每行存放一个单词,要求将符合条件的单词按字典顺序存储,函数返回符合条件的单词个数。
⑵ 编写main()函数,声明数组并用测试数据初始化数组,调用函数FindNoVowel,将符合条件的所有单词按字典顺序输出,单词之间用空格隔开。
测试数据,10个字符串为:"ftp","qq","msn","internet","web","google","bbs","mp3","blog","ibm"
运行结果:bbs  ftp  mp3  msn  qq 

#include<stdio.h>
#include<string.h>
int FindNoVowel(char *str[][20],int num,char res[][20]);


int main()
{
	char *str[20]={"ftp","qq","msn","internet","web","google","bbs","mp3","blog","ibm"};
	char res[][20]={0};
	int num=10,k,i;
	k=FindNoVowel(str,num,res);
	for(i=0;i<k;i++)
		printf("%s",res[i]);
	return 0;
}

int FindNoVowel(char *str[][20],int num,char res[][20])
{
	int i,j,k=0,flag;
	char temp[20];
	for(i=0;i<num;i++)
	{
		flag=0;
		for(j=0;j<strlen(str[i]);j++)
		{
			if(*(str[i]+j)=='a' || *(str[i]+j)=='e' || *(str[i]+j)=='i' || *(str[i]+j)=='o' || *(str[i]+j)=='u')
				flag++;
		}
		if(flag==0)
		{
			strcpy(res[k],*str[i]);
			k++;
		}
	}

	for(i=0;i<k-1;i++)//字典序排序
		for(j=0;j<9-k;j++)
		{
			if(strcmp(res[j],res[j+1])>0)
			{
				strcpy(temp,res[j]);
				strcpy(res[j],res[j+1]);
				strcpy(res[j+1],temp);
			}
		}
	return k;
}

修改如下,供参考:

#include<stdio.h>
#include<string.h>

#define N 10

int FindNoVowel(char *str[],int num,char res[][20]);

int main()
{
	char *str[20]={"ftp","qq","msn","internet","web","google","bbs","mp3","blog","ibm"};
	char res [N][20]={0};
	int  num=N,k,i;
	k=FindNoVowel(str,num,res);
	for(i=0;i<k;i++)
		printf("%s ",res[i]);
    
	return 0;
}
int FindNoVowel(char *str[],int num,char res[][20])
{
	int i,j,k=0,flag;
	char temp[20];
	for(i=0;i<num;i++)
	{
		flag=0;
	       	for(j=0;j<strlen(*str);j++)
		{
			 if(*(*str+j)=='a'||*(*str+j)=='e'||*(*str+j)=='i'
                                          ||*(*str+j)=='o'||*(*str+j)=='u')
                          {flag=1; break;}
		}
		if(flag==0)
		{

			strcpy(res[k],*str);
			k++;
		}
                str++;
	}
	for(i=0;i<k-1;i++)//字典序排序
		for(j=0;j<k-i-1;j++)
		{
			if(strcmp(res[j],res[j+1])>0)
			{
				strcpy(temp,res[j]);
				strcpy(res[j],res[j+1]);
				strcpy(res[j+1],temp);
			}
		}
	return k;
}

 

需要调试一下看看,这么改了一下,不知道适不适合你用

#include<stdio.h>
#include<string.h>
int FindNoVowel(char *str[10],int num,char *res[10]);
 
int main()
{
	char *str[10]={"ftp","qq","msn","internet","web","google","bbs","mp3","blog","ibm"};
	char *res[10];
	int num=10,k,i;
	for(i=0;i<10;i++)
		res[i] = new char[10];
	k=FindNoVowel(str,num,res);
	for(i=0;i<k;i++)
		printf("%s\n",res[i]);

	return 0;
}
int FindNoVowel(char* str[10],int num,char* res[10])
{
	int i,j,k=0,flag;
	char temp[20];
	for(i=0;i<num;i++)
	{
		flag=0;
		for(j=0;j<strlen(str[i]);j++)
		{
			if(*(str[i]+j)=='a' || *(str[i]+j)=='e' || *(str[i]+j)=='i' || *(str[i]+j)=='o' || *(str[i]+j)=='u')
				flag++;
		}
		if(flag==0)
		{
			strcpy(res[k],str[i]);
			k++;
		}
	}
	for(i=0;i<k-1;i++)//字典序排序
		for(j=0;j<k-i-1;j++)
		{
			if(strcmp(res[j],res[j+1])>0)
			{
				strcpy(temp,res[j]);
				strcpy(res[j],res[j+1]);
				strcpy(res[j+1],temp);
			}
		}
	return k;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m