永发信息网

用指向一维数组的指针编程

答案:5  悬赏:0  手机版
解决时间 2021-03-15 03:19
题目是:“输入两串字符(假定不输入大写字母),每串以“&”结束,输出在两个串中都出现过的字母”

用指向一维数组的指针来完成这题

满意追加分呀
4个貌似都运行不了- -##
VC还不太会用,汗~~新建?运行?。。
hustliqiang05你编的我喜欢,但是为什么没有结果输出的呢??(可能我还不太会用VC)
最佳答案
带了些注释,希望对你有所帮助:
#include"stdio.h"
#define SIZE 80
void main()
{
int i,j;
char a[SIZE+1]="a",b[SIZE+1]="b",c[SIZE+1]={'\0'},*pa=a,*pb=b,*pc=c;
printf("Please input the first string end with &:\n");
for(i=0;i<SIZE;i++)
{
scanf("%c",&a[i]);
if(a[i]=='&')
break;
}
printf("Please input the second string end with &:\n");
getchar();
for(j=0;j<SIZE;j++)
{
scanf("%c",&b[j]);
if(b[j]=='&')
break;
}
for(;*pa!='&';pa++)
{
if(*pa>='a'&&*pa<='z')
{
for(;*pb!='&';pb++)
if(*pa==*pb)
{
for(;*pc!='\0';pc++)
if(*pa==*pc)
break;
if(*pc=='\0')
{
*(pc++)=*pa;
*pc='\0';
pc=c;
break;
}
}
}
pb=b;
}
printf("%s",pc);
}
思想:
主要说说加入c数组的原因,加入c数组主要就是为了不输出相同的重复字符,不用c记录下已经得到的相同字符的话,就不能比较现在相同的字符是否已经比较过。
全部回答
#include "stdio.h" #include "conio.h" char *getStr() { char ch='\0',*s=""; long i=0; while((ch=getche())!='&'){ if( !strlen(s)%10 ) {s= strcpy((char*)malloc(strlen(s)+10),s);} if(ch!='\b'){s[i]=ch;s[++i]='\0';} else if( i>0 ){s[--i]='\0';putch(' ');putch('\b');} rewind(stdin); } return s; } char * sameChr(char* s1 , char* s2) { char *same , *tmp; long i,n=0; same = (char*)malloc(strlen(s1)+strlen(s2)); for(i=0;i<strlen(s1);i++) if( (tmp =strpbrk( s1,s2) )!=NULL ) { same[n] = *tmp; *tmp = 9; n++; } same[n]='\0'; return same; } main() { char *str1 , *str2 ,*same; puts("\n\nplease input String 1:"); str1 = getStr(); puts("\n\nplease input String 2:"); str2 = getStr(); puts("\n\nThe same char:"); puts( sameChr(str1,str2) ); getch(); }
输出2字符串共同的小写字母。假定字符串长度小于120,允许含空白,但必须 用 & 结束。 #include<stdio.h> #include<stdlib.h> void main() { char *s1,*s2; int i,j; int L1,L2; int v[26]; s1 = (char *) malloc(120*sizeof(char)); s2 = (char *) malloc(120*sizeof(char)); if (!s2){ printf("no enough memory\n");exit(0);}; printf("Please enter string 1 with & as the end\n"); fgets(s1,80,stdin); printf("Please enter string 2 with & as the end\n"); fgets(s2,80,stdin); for (i=0;i<strlen(s1);i++) if (*(s1+i) == '&') { *(s1+i) = '\0';break;}; for (i=0;i<strlen(s2);i++) if (*(s2+i) == '&') { *(s2+i) = '\0';break;}; for (i=0;i<26;i++) v[i] = 0; for (i=0;i<strlen(s1);i++) if ( *(s1+i) >='a' && *(s1+i) <='z') v[*(s1+i) -'a'] =1; for (i=0;i<strlen(s2);i++) if ( *(s2+i) >='a' && *(s2+i) <='z') { if (v[*(s2+i) -'a'] ==1) v[*(s2+i) -'a'] =2; }; printf("\nresults:\n"); for (i=0;i<26;i++) if (v[i]==2) printf("%c ", ('a'+i)); }
#include"stdio.h" #include"ctype.h" void ps (char *a,char *b) {int i=0,count[26]={0},count1[26]={0};//count用于统计字母出现次数 while((a[i]=getchar())!='&')//字符串以&号结束 { if(isalpha(a[i])!=0);//判断是否为字母 { count[a[i]-97]++;//统计字符出现次数,a的ASCII编码是97 } i++; } while((b[i]=getchar())!='&')//统计字符串b中的字母 { if(isalpha(b[i])!=0); { count1[b[i]-97]++; } i++; } for(i=0;i<26;i++) { if(count[i]!=0&&count1[i]!=0)//对同时出现的字母进行输出 printf("%c ",'a'+i); } printf("\n"); } void main() { char b[50],c[50]; ps(b,c); }
int (*p)[4];//相当于定义一个二维数组 p=&a[0];//把a数组的首地址交给p p指向a数组0行开头位置,等价于&a[0] p+1指向a数组1行开头位置,等价于&a[1],这都是指向行的 p[0]表示指向0行0列地址,等价于&a[0][0],指向列的 *p[0]表示指向0行0列元素,等价于a[0][0],指向数组元素的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
华北六省市(豫、鲁、冀、津、晋、蒙)联合编
西班牙发达吗?
我染黑色头发三个多月了,现在想染紫色,能不
struts项目中启动服务器是出现这样的信息
耶稣布身上有哪些疑点
街霸x铁拳mod怎么用
20减去7.98除以4.2可以用简便方法
已经辞职了不想让家里人知道辞职的真相,已找
锥形瓶口在白磷燃烧前后均要塞紧瓶塞,为什么
中国建设银行红建路支行地址在什么地方,想过
春日翻译白话文
关于印尼签证
哪些气候最适合居住 哪些城市气候适合居住
半年前漂了个最浅亚麻金,现在想染咖啡色,以
东陶湾在什么地方啊,我要过去处理事情
推荐资讯
中国第一辆火车动车组什么时候开通的
大哥,pdd,草莓那些哪个厉害
我要一篇以《秋思》为题的作文
求黑犬兽美少女全集57本
现代悦动刹车分磅多少钱
血糖高能喝牛骨汤么
知音酒吧这个地址在什么地方,我要处理点事
三星e2220w能用dvi转hdmi转换器连ps4吗?
DN500弯头四节做法展开尺寸
1OO平方光伏发电一年发多少度电
木垒生态羊肉烧烤NO.9地址在哪,我要去那里办
第一辆车很想买凯美瑞,但是又想买A级车
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?