C语言问题

2025-03-17 08:18:48
推荐回答(5个)
回答1:

我帮你写一个吧,一会传上来!!!!记得我的位置哦,呵呵

写完了,传给你,百分之百正确,经过测试!!

一共两种情况,请按需要选用!

这是应该是最全面的方法了!

希望对你有帮助!

#include
#include
#include
char CutString[20]={'\0',};

char* CutStr(char* strr,char A,char B)//指针类型
{
int Begin=-1;
int End_=-1;

int k=strlen(strr)-1;//得到输入串的长度

for(int i=0;i<=k;i++)//算出起始和终止的位置
{
//-----方式一: 这是掐头去尾的方法 [BEGIN]-----------
if(strr[i]==A && Begin==-1) Begin=i;
if(strr[k-i]==B && End_==-1) End_=k-i;//
//----------------------------------------

//【如果你要的是这种的就把注释打开, 把上面的两条语句注释掉就可以了】
//-----方式2:这是顺序找到第2个字符起始位的方法----------
// if(strr[i]==A && Begin==-1)
// {
// Begin=i;
// i++;
// }
//
// if(i<=k)//如果没超出字符串范围
// {
// if(Begin!=-1)//如果已找到 字符A的起始位,就开始找B了
// {
// if(strr[i]==B && End_==-1)
// {
// End_=i;//开始找B的位置
// break;
// }
// }
// }
//-----------------------------------------------------

}

if(Begin==-1) {printf("No find A\n");return "";}//如果没找到A的处理
if(End_==-1) {printf("No find B\n");return "";}//如果没找到B的处理

k=0;
for(int j=Begin;j<=End_;j++)//得到A-B的字符串存入CutString
{
CutString[k]=strr[j];
k++;
}
CutString[k]='\0';//标记串结束
return CutString;//一个字符数组的数组名实际上就是一个指针
}

void main()
{
char strr[20];
char CharA;
char CharB;

while(1)
{
printf("Input a strng:");//输入串
scanf("%s",strr);
getchar();//吸收回车符

printf("Input the first char:");//输入字符A
scanf("%c",&CharA);
getchar();//吸收回车符

printf("Input the second char:");//输入字符B
scanf("%c",&CharB);
getchar();//吸收回车符

printf("%s",CutStr(strr,CharA,CharB));//调用函数得到A-B的串
printf("\n");
system("pause");//暂停
system("cls");//清屏
}

}

//方式一:输出结果 (掐头去尾)
// Input a strng:aaibbbicccidd
// Input the first char:i
// Input the second char:i
// ibbbiccci
// 请按任意键继续. . .

//方式二:输出结果 (顺序查找)
// Input a strng:aaibbbicccidd
// Input the first char:i
// Input the second char:i
// ibbbi
// 请按任意键继续. . .

回答2:

char *indexofstr(char *str,char c)
{
for(;*str&&*str!=c;str++);
if(*str) str=NULL;
return str;
}

printsubstr(char *str,char start,char end){
char *pstart,*pend;
char *pp;
pstart=indexofstr(str,start);
pend=indexofstr(str,end);
if(pstart&&pend)
{
if(ptart>pend){pp=pstart;pstart=pend;pend=pp;}
for(pp=pstart;pp<=pend;pp++) printf("%c",*pp);
//char tmp;
//tmp=*pend;
//*pend='\0';
//printf("%s",pstart);
//*pend=tmp;
}
}

回答3:

代码如下,思路见注释。
#include
char *string_slice(char *p, char begin, char end)
{
char *head, *tail;
if((head = strchr(p, begin)) == NULL) /*查找begin字符,找不到则返回NULL*/
return NULL;
if((tail = strchr(head, end)) == NULL) /*查找end字符,找不到则返回NULL*/
return NULL;
*(++tail) = '\0'; /*为了printf输出停止,把tail的下一位赋值为'0'*/
return head;
}

int main(int argc, char *argv[])
{
char arr[100];
char begin, end;
scanf("%s", arr); /*输入字符串*/
getchar(); /*接受回车*/
begin = getchar();
getchar(); /*接受回车*/
end = getchar();
getchar();/*接受回车*/
printf("%s", string_slice(arr, begin, end));
return 0;
}

回答4:

# include
# include
# include

void check(char *p, char start, char end) // 检测是否有匹配的字符串
{
int i, len, t;
len = strlen(p);
for (i = 0; i < len; i++)
{
if (*(p + i) != start)
continue;
else
{
t = i;
break;
}
}
if (i >= len)
{
printf("输入的字符有误,没有匹配的字符串,程序退出运行!\n");
exit(0);
}
for (i = t; i < len; i++)
{
if (*(p + i) != end)
continue;
else
break;
}
if (i >= len)
{
printf("输入的字符有误,没有匹配的字符串,程序退出运行!\n");
exit(0);
}
}

char* match(char *p, char start, char end)
{
int len, i, addr1, addr2;
char *newp;
len = strlen(p);
for (i = 0; i < len; i++)
{
if (*(p + i) == start)
{
addr1 = i;
break;
}
}
for (i = addr1+1; i < len; i++)
{
if (*(p + i) == end)
{
addr2 = i;
break;
}
}
newp = (char *)malloc(sizeof(addr2 - addr1 + 1));
newp = p + addr1;
*(newp + addr2 - addr1 + 1) = '\0';
return newp;
}

void main()
{
char pstr[100];
char ch1, ch2;
printf("输入一个字符串: \n");
scanf("%s", pstr);
printf("输入第一个要匹配的字符: ");
scanf(" %c", &ch1);
printf("输入第二个要匹配的字符: ");
scanf(" %c", &ch2);
check(pstr, ch1, ch2);
puts(match(pstr, ch1, ch2));
}

回答5:

建议你上黑客X档案的呆呆虫问吧,去问呆呆虫!