规定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:将字符串中的前导号全部删除,中间和尾部的号不删除。
例如,字符串中的内容为:ABCDEFG,删除后,字符串中的内容应当是:ABCDEFG。在编写函数时,不得使用C语言提供的字符串函数。
使用了两个指针 i 和 j 来遍历字符串。首先,我们使用指针 i 找到第一个不是#的字符(前导号)的位置。然后,我们使用指针 j 将后面的字符复制到前面,实现删除前导号的效果。最后,我们在字符串的末尾添加一个空字符\0,以表示字符串的结束。
void fun(char *str) {
int i = 0;
while (str[i] == '#') {
i++;
}
int j = 0;
while (str[i] != '\0') {
str[j] = str[i];
i++;
j++;
}
str[j] = '\0';
}
int main() {
char str[] = "###ABCDEFG";
fun(str);
printf("%s\n", str);
return 0;
}
【以下回答由 GPT 生成】
#include <stdio.h>
// 函数名:removeLeadingEm
// 输入:char* str - 要处理的字符串
// 输出:无
// 功能:删除字符串中前导的<em>号
void removeLeadingEm(char* str) {
int i = 0;
// 遍历字符串,找到第一个非<em>的字符位置
while (str[i] != '\0') {
if (str[i] != '<' || str[i+1] != 'e' || str[i+2] != 'm' || str[i+3] != '>') {
break;
}
i += 4; // 跳过<em>号
}
// 将后面的字符往前移动
int j = 0;
while (str[i] != '\0') {
str[j] = str[i];
i++;
j++;
}
str[j] = '\0'; // 字符串结尾标志
}
int main() {
char str[] = "<em><em><em>A<em>BC</em>DEF<em>G</em>";
removeLeadingEm(str);
printf("%s\n", str); // 输出:A<em>BC</em>DEF<em>G</em>
return 0;
}
解决方案说明: 1. 定义一个函数 removeLeadingEm
,输入参数为一个字符串指针 char* str
,表示要处理的字符串; 2. 使用一个循环遍历字符串,找到第一个非的字符位置; 3. 在找到非字符位置后,使用另一个循环将后面的字符依次往前移动; 4. 最后将字符串的结束标志 '\0' 放在移动后的最后一个字符的后面,表示字符串的新长度; 5. 在 main
函数中,定义一个字符串数组 str
并初始化,调用 removeLeadingEm
函数进行处理,然后输出结果。
【相关推荐】