一.消除两边的'*'号
1.完整代码
void my_remove(char * p1, int len)
{
char* p2 = p1 + len - 1;
while (*p1 == '*' && p1 != p2)
{
*p1 = '\0';
p1++;
}
while (*p2 == '*' && p1 != p2)
{
*p2 = '\0';
p2--;
}
}
int main()
{
char str[20] = { "0" };
printf("请输入一个字符串:\n");
gets(str);
printf("消除前: %s\n", str);
int len = strlen(str);
my_remove(str, len);
printf("消除后: %s", str);
return 0;
}
2.思路讲解
要想消除字符串两边的‘*’,我们需要找到字符串的起点和终点,所以运用strlen函数计算字符串的长度len,len - 1就指向了字符串的末尾,用指针char *p1 = str指向字符串的起点,用指针char * p2 = p1 + len - 1指向字符串的终点,让指针向中间移动,在指向的不是‘*’时跳出while循环,还有一种情况是整个字符串都是由*组成的,所以当两个指针指向同一个位置的时候 p1 = p2 时,我们也要跳出while,避免出现死循环。
二.消除左边或右边的‘*’
1.消除左边*号
完整代码
void my_remove(char * p1, int len)
{
while (*p1 == '*' && p1 != p2)
{
*p1 = ' ';
p1++;
}
}
int main()
{
char str[20] = { "0" };
printf("请输入一个字符串:\n");
gets(str);
printf("消除前: %s\n", str);
int len = strlen(str);
my_remove(str, len);
printf("消除后: %s", str);
return 0;
}
2.思路讲解
只需要一个指针p1指向字符串的起点,在不指向*号时跳出循环
2.消除右边*号
完整代码
void my_remove(char * p1, int len)
{
char* p2 = p1 + len - 1;
while (*p2 == '*' && p1 != p2)
{
*p2 = ' ';
p2--;
}
}
int main()
{
char str[20] = { "0" };
printf("请输入一个字符串:\n");
gets(str);
printf("消除前: %s\n", str);
int len = strlen(str);
my_remove(str, len);
printf("消除后: %s", str);
return 0;
}
2.思路讲解
用指针指向字符串的终点,当不指向*号时,跳出while循环。
三.消除字符串中间的‘*’号
1.完整代码
void my_remove(char * p1, int len)
{
while (*p1 != '\0')
{
if (*p1 == '*')
{
p1++;
}
else if (*p1 != '*')
{
break;
}
}
char* p2 = p1;
while (* p2 != '\0')
{
if (*p2 != '*')
{
p2++;
}
else if (*p2 == '*')
{
break;
}
}
char* p3 = p2;
while (*p3 != '\0')
{
if (*p3 == '*')
{
*p3 = ' ';
p3++;
}
else
break;
}
}
int main()
{
char str[20] = { "0" };
printf("请输入一个字符串:\n");
gets(str);
printf("消除前: %s\n", str);
int len = strlen(str);
my_remove(str, len);
printf("消除后: %s", str);
return 0;
}
2.思路讲解
只消除字符串中间的*号,我们需要定位到中间*号的起点,用指针指向中间*号起点,并且在不指向*时跳出循环。