...输入的字符只包含字母和*号。请编写函数fun,功能是:将字符串中...
发布网友
发布时间:2024-10-24 13:05
我来回答
共5个回答
热心网友
时间:2024-10-24 15:46
1、其实头函数每个都需要用到的就是#include <stdio.h>.在这儿给大家说的就是这里需要添加一个字符串函数,因为程序里面涉及到了输出和输入字符串以及字符。#include <string.h>。
2、定义两个相同容量的字符串储存的变量 char a[100]; char b[100];。以及整数变量 int c; int i=0,j=0; 其中a[100]是存字符串的,b【100】是存你删除对应字符的字符串的,整数C是你想删除第几位。j ,i 是后面for循坏中要使用到的变量。
3、 printf("请输入你的字符串"); scanf("%s",a); printf("请输入你想要删除第几位字符"); scanf("%d",&c)。
4、 for(i=0;i<strlen(a);i++) { if(i+1!=c) { b[j]=a[i]; j++; } } printf(" %s",b); } 。
5、 这几行代码逻辑语句是:只要当i+1不等于c时把a【i】里面的字符赋给b【i】,那么这样当i+1=c时不把它赋给b【i】从而实现删除功能。
6、最后完整的看一下整体的一个代码流程。
热心网友
时间:2024-10-24 15:53
#include<stdio.h>
#include<string.h>
char *del(char *a)
{
while (*a == '*') a++; // a是指针 *a是当前字符 如果字符是‘*’ a++表示 a指向下一个字符 然后 // 做比较 至于答案的拷贝完全多余 只需要在原串的不同位置指向就好
// 因为只是 删前导 而不动中间 或者 尾部字符
return a;
}
int main()
{
char a[100]={"*************skafjdlskjfla8********"};
char *newstr;
newstr = del(a);
printf("%s\n",a);
printf("new string :\n%s\n",newstr);
return 0;
}
热心网友
时间:2024-10-24 15:49
第一个while循环是当p指向的字符是*时进行循环,p++就是让指向字符数组的指针指向下个单元。类似对数组进行for循环遍历输出的控制循环变量i++。然后p指向下一个字符,最后让指针p指向字符数组a中第一个非*的字符。
比如a中的字符是“***a**bcd*”,那么第一个while循环后,p指向字符a中第四个字符中'a';如果a中字符是“e*bcd*”,那么第一个while循环后,p指向a中第一个字符'e'。
第一个while循环后,然后就把p位置的字符依次在往字符数组a中赋值。如果a中是“***a*bc*”,第一个while后p指向'a',所以此时就把'a'赋值给a【0】,取代了原本在a【0】中的*。然后一直循环到a中最后一个字符,最后循环完成后在末尾加上空字符'\0'。实现了去掉字符数组中首端*号的功能!
热心网友
时间:2024-10-24 15:53
第一个while(*p=='*')p++;
这个补全就是
while(*p=='*')
{
p++;
}
就是从前面开始等于*的直接指针后移
把前面的*全部略过
while(*p)
{
a[j++]= *p;
p++;
}
然后从第一个不是*的开始逐位赋值给字符数组a
最后手工添加结束符
热心网友
时间:2024-10-24 15:49
#include<stdio.h>
#include<string.h>
void fun(char *str)
{
int len=(signed)strlen(str);
for(int i=0;i<len;i++)
{
if(*(str+i)=='*')
{
continue;
}
else
{
for(int j=0;j<len-i;j++)
*(str+j)=*(str+j+i);
*(str+j)='\0';
return;
}
}
}
void main()
{
char str[]={"****132sfs**wefsf**"};
fun(str);
printf("%s\n",str);
}