1.如字符串为:*****ABC*****SHDFN****
运行后结果为:*****ABCSHDFN****
2.不能使用C库函数
已通过编译,而且除了printf()和scanf()之外,什么库函数都没用。
void main(void)
{ char *str,i;
do
{ printf("Please input:\n");
scanf("%s",str);
for(i=0;str[i]!='\0';i++);
}while(i==0);
i=fun(str,i-1); /*自定义的函数,负责删除'*'*/
printf("%s\n",str+i);/*从第i位(即第一个不是'*'的那一位)开始显示*/
}
int fun(char *str,int j)
{ int i,f1=0,f2=0; /*f1与f2是标志变量,当他俩都为1时,则以删除完了*/
for(i=0;i!=j&&f1*f2==0;)
{ if(str[i]=='*') i++; /*如果是'*',下标后移,否则将f1置1*/
else f1=1;
if(str[j]=='*') j--;/*如果是'*',下标前移.否则f2置1,并将后一位置'\0'*/
else { str[j+1]='\0';f2=1; }
}
return i;
}
void main(void)
{ char *str,i;
do
{ printf("Please input:\n");
scanf("%s",str);
for(i=0;str[i]!='\0';i++);
}while(i==0);
i=fun(str,i-1); /*自定义的函数,负责删除'*'*/
printf("%s\n",str+i);/*从第i位(即第一个不是'*'的那一位)开始显示*/
}
int fun(char *str,int j)
{ int i,f1=0,f2=0; /*f1与f2是标志变量,当他俩都为1时,则以删除完了*/
for(i=0;i!=j&&f1*f2==0;)
{ if(str[i]=='*') i++; /*如果是'*',下标后移,否则将f1置1*/
else f1=1;
if(str[j]=='*') j--;/*如果是'*',下标前移.否则f2置1,并将后一位置'\0'*/
else { str[j+1]='\0';f2=1; }
}
return i;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2021-10-30
#include <stdio.h>
int main(){
char s[] = "**AB***CDE******FG*****HI***";
char r[] ="";
int length = sizeof(s) / sizeof(char);
printf("The Length is '%d'.\n",length);
int j =0;
for (int i = 0; i < length; ++i)
{
if (s[i] != '*')
{
r[j] = s[i];
j++;
}
}
printf("The result is '%s'.\n",r);
}
第2个回答 2021-04-27
#include<stdio.h>
int main()
{
int i=0, j = 0;
char str1[100], str2[100];
scanf_s("%s", str1,100);
while ( str1[i] != '\0')
{
if (str1[i] != '*')
{
str2[j] = str1[i];
j++;
}
i++;
}
str2[j] = '\0';
printf("%s\n", str2);
return 0;
}
其中scan_s那一列中的 _s 和 ,100 是由于在visual studio 2019上编写的,其他编译器可能不一定需要,去掉即可
int main()
{
int i=0, j = 0;
char str1[100], str2[100];
scanf_s("%s", str1,100);
while ( str1[i] != '\0')
{
if (str1[i] != '*')
{
str2[j] = str1[i];
j++;
}
i++;
}
str2[j] = '\0';
printf("%s\n", str2);
return 0;
}
其中scan_s那一列中的 _s 和 ,100 是由于在visual studio 2019上编写的,其他编译器可能不一定需要,去掉即可
第3个回答 2009-04-04
给,已经编译运行确认:
#include<conio.h>
#include<stdio.h>
#define N 50 //定义字符串最长为50个字符
int main()
{
int length=0,head,tail;
int i,j;
char str[N]={NULL};
char temp;
printf("Please input a string: \n");
gets(str);
while(str[length++]);//统计字符串长度
for(head=0;head<length;head++) //记录从头起第一个不为*的成员的位置
if(str[head]!='*') break;
length--;
for(tail=length-1;tail>=head;tail--)//记录从尾起第一个不为*的成员的位置
if(str[tail]!='*') break;
for(i=head;;)
{
if(i>=tail) break; //如果中间值都已经检测完毕,退出循环
if(str[i]=='*') //遇到中间的*
{
for(j=i;str[j]!='\0';j++)//删除*
{
str[j]=str[j+1];
}
tail--;//尾计数相应的减一
}
else i++;//检测下一个
}
printf("%s",str);
getch();
return 0;
}
#include<conio.h>
#include<stdio.h>
#define N 50 //定义字符串最长为50个字符
int main()
{
int length=0,head,tail;
int i,j;
char str[N]={NULL};
char temp;
printf("Please input a string: \n");
gets(str);
while(str[length++]);//统计字符串长度
for(head=0;head<length;head++) //记录从头起第一个不为*的成员的位置
if(str[head]!='*') break;
length--;
for(tail=length-1;tail>=head;tail--)//记录从尾起第一个不为*的成员的位置
if(str[tail]!='*') break;
for(i=head;;)
{
if(i>=tail) break; //如果中间值都已经检测完毕,退出循环
if(str[i]=='*') //遇到中间的*
{
for(j=i;str[j]!='\0';j++)//删除*
{
str[j]=str[j+1];
}
tail--;//尾计数相应的减一
}
else i++;//检测下一个
}
printf("%s",str);
getch();
return 0;
}