int i;
char str[100];
char *p;
puts("Enter a string:");
gets(str);
system("cls");
p = &str;
for (i = 0; i < strlen(str); i++) {
printf("\n%s", p);
++p;
//printf("\n%d %d", i, *p);
}
for (i=2*i+1; i > strlen(str); i--) {
printf("%s\n", p);
p--;
//printf("\n%d %d", i, *p);
}
该程序的输出是
"alpine
lpine
pine
ine
ne
e
e
ne
ine
pine
lpine
alpine".
如何让它显示&#39; e&#39;只有一次,而不是两次?
答案 0 :(得分:2)
你的代码问题是,当你p
到达字符串的最后一个字符时,你会在开始递减之前再次递增它。因此,如果您在第一个单e
之后仔细查看,则还会打印空字符串。
试试这个。
#include<stdio.h>
#include<string.h>
int main() {
int i;
char str[100];
char *p;
puts("Enter a string:");
gets(str);
p = &str;
for (i = 0; i < strlen(str); i++) {
printf("\n%s", p);
++p;
}
p--;
for (; i > 1; i--) {
p--;
printf("\n%s", p);
}
}
答案 1 :(得分:0)
#include<stdio.h>
int main()
{
int i;
char str[100];
char *p;
puts("Enter a string:");
gets(str); // input word alpine, has six letters
system("cls");
p = &str;
for (i = 0; i < strlen(str); i++) {
printf("\n%s", p);
++p;
} // At the end of this i equals 6
// p is now pointing at a l p i n e \0
// ^ here at the null terminator
// In the following loop you set i to 13, this will loop 7 times.
// First you print the null terminator \0 and \n
// Then the 6 characters of alpine backwards
for (i = 2 * i + 1; i > strlen(str); i--)
{
printf("%s\n", p);
p--;
}
}
我会留给你找出解决方案。