题目是:“输入两串字符(假定不输入大写字母),每串以“&”结束,输出在两个串中都出现过的字母”
用指向一维数组的指针来完成这题
满意追加分呀
4个貌似都运行不了- -##
VC还不太会用,汗~~新建?运行?。。
hustliqiang05你编的我喜欢,但是为什么没有结果输出的呢??(可能我还不太会用VC)
用指向一维数组的指针编程
答案:5 悬赏:0 手机版
解决时间 2021-03-15 03:19
- 提问者网友:你独家记忆
- 2021-03-15 00:10
最佳答案
- 五星知识达人网友:酒安江南
- 2021-03-15 01:32
带了些注释,希望对你有所帮助:
#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"
#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记录下已经得到的相同字符的话,就不能比较现在相同的字符是否已经比较过。
全部回答
- 1楼网友:撞了怀
- 2021-03-15 05:10
#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楼网友:洒脱疯子
- 2021-03-15 04:28
输出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));
}
- 3楼网友:行路难
- 2021-03-15 03:12
#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);
}
- 4楼网友:梦中风几里
- 2021-03-15 02:56
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],指向数组元素的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯