Code Bye

C语言求助

 

1.#include<stdio.h>
void fun(char *x[10], int n)
{
int i=0,j=0;
while(i<5)
{
x[i][n]=””\0″”;//对于create为什么删除的是te,而不是t
i++;
}
// return(*x);
}

main()
{
char x[5][10]={“create”,”modify”,”sort”,”skip”,”delete”};
int i;
printf(“the original string:\n”);
for(i=0;i<5;i++)
puts(x[i]);
printf(“\n”);
printf(“the string after delect:\n”);
fun(x,4);
for(i=0;i<5;i++)
puts(x[i]);
printf(“\n”);
}
2.用数组或指针编写程序实现:寻找一个字符串中第一次出现两次的字符

10分
1.修改如下:
#include<stdio.h>
void fun(char x[5][10], int n)
{
	x[n][0] = 0;
}
int main()
{
	char x[5][10] = { "create","modify","sort","skip","delete" };
	int i;
	printf("the original string:\n");
	for (i = 0; i<5; i++)
		puts(x[i]);
	printf("\n");
	printf("the string after delect:\n");
	fun(x, 4);
	for (i = 0; i<5; i++)
		puts(x[i]);
	printf("\n");
	return 0;
}
10分
2.这样可好:
int i, pos1, pos2, n;
unsigned char bm[32];
int main(void)
{
	char *s = "beijing";
	n = strlen(s);
	memset(bm, 0, 32);
	for (i = 0; i < n; i++)
	{
		pos1 = s[i] / 8;
		pos2 = s[i] % 8;
		if (0 == (bm[pos1] & (1u << pos2)))
		{
			bm[pos1] |= 1u << pos2;
		}
		else
		{
			printf("%c\n", s[i]);
			break;
		}
	}
	if (i == n) printf("non a character occurs twice!\n");
	return 0;
}
10分
正确来讲,是第一个出现两次以上的字符
另一个问题
#include<stdio.h>
char *fun(char *p)
{
int i,j=0;
char *q=p;
for(i=0;i<20;i++)
{
if(“”0″”<=q[i]&&q[i]<=””9″”)
p[j++]=q[i];
}
for(i=0;i<20;i++)
{
if(“”0″”<=q[i]&&q[i]<=””9″”)
continue;
else p[j++]=q[i];
}

return(p);//为什么不能返回局部变量q的地址
}
/*{
char *q=NULL;
for(i=0;i<20;i++)
{
if(“”0″”<=p[i]&&p[i]<=””9″”)
q[j++]=p[i];
}
for(i=0;i<20;i++)
{
if(“”0″”<=p[i]&&p[i]<=””9″”)
continue;
else q[j++]=p[i];
}

return(q);//为什么不能返回局部变量q的地址,如果在前一句加p=q;返回q也是错误的,为什么?
}
*/
main()
{

char s[20]=”asd123fgh5##43df”;//为什么输出为123543fgh##df
char *b=NULL;
b=fun(s);

printf(“%s\n”,b);
}

10分

char *q=p;           // 这样写
for(i=0;i<20;i++)
{
if(“”0″”<=p[i]&&p[i]<=””9″”)
q[j++]=p[i];
}
for(i=0;i<20;i++)
{
if(“”0″”<=p[i]&&p[i]<=””9″”)
continue;
else q[j++]=p[i];
}

return q;


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言求助