写到这一步之后,该如何移动指针,使字符串输出时从“a”开始只输出后面的部分?
这样改,供参考:
#include <stdio.h>
void fun(char *a)
{
/****** Begin ******/
char *p = a;
int n = 0, i = 0;
while (*p == '*'){ //统计前导 * 号
n++; p++;
}
while (*p) a[i++] = *p++;// 把字符前移
while (n--) a[i++] = '*';//将 * 号补充到字符串尾
a[i] = '\0';
/****** End ******/
}
int main()
{
char s[81];
int n = 0;
scanf("%s", s);
fun(s);
puts(s);
return 0;
}
程序呢?没看到代码呀!
不知道你这个问题是否已经解决, 如果还没有解决的话:#include <stdio.h>
int main()
{
char c1, c2, c3, c4;
c1 = 'A';
c2 = 'B';
c3 = c1 + 32;
c4 = c2 + 32;
printf("The capital letter: %-3c %-3c\n",c1,c2);
printf(" Lowercase letter: %-3c %-3c\n",c3,c4);
return 0;
}
解决方案:
可以通过指针来实现将字符串中的前导星号移动到字符串结尾,并输出字符串后面的部分。具体步骤如下:
1.定义一个指针变量,指向该字符串的首地址。
2.遍历字符串,判断是否有前导星号,记录前导星号的个数count。
3.根据count的值,使用循环语句将前导星号移到字符串尾部。
4.将指针向后移动count个字符。
5.输出字符串后面的部分,即从该指针所指位置开始的字符串。
代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
int count = 0;
char str[100] = "***hello, world!***"; // 待处理的字符串
char *p = str; // 定义指针变量,指向该字符串的首地址
// 遍历字符串,计算前导星号的个数
while (*p == '*') {
count++;
p++;
}
// 将前导星号移动到字符串结尾
for (int i = 0; i < count; i++) {
char temp = str[i];
for (int j = i; j < strlen(str) - 1; j++) {
str[j] = str[j+1];
}
str[strlen(str)-1] = temp;
}
// 移动指针,指向字符串后面的部分
p = &str[count];
// 输出字符串后面的部分
printf("%s\n", p);
return 0;
}
输出结果为:
hello, world!***
注:代码中用到了头文件string.h
,主要是为了获取字符串长度,以便在移动前导星号时确定循环次数。