字符串逆序打印 高手来看看~
1 #include <stdio.h>
2
3 char * setchar(char *str)
4 {
5 int len = 0, i = 0;
6 char *strlen = str;
7 char *restr = str; // 本来要声明成 static 的 但 gcc 总是报 “初始值设定不是常量” 不解 ....
8
9 while (*strlen++) len++;
10 strlen -= 2; //借鉴某高手的 去‘\0’ 不过为什么要减去两个字节呢? -1 不就好了么?
11 len -= 2; //本人为配合下面循环照猫画虎 ....
12
13 while (len >= 0)
14 {
15 restr[i] = strlen[len]; // 逆序 将strlen 倒着打印给 restr
16 i++;
17 len--;
18 }
19 printf("%s \n", restr); // 检测
20 return restr;
21
22 }
23 int main(void)
24 {
25 char str[] = {"FXXXXXX world"};
26 printf("%s \n", setchar(str));
27 return 0;
28 }
打印出来是乱码 ..............
高手给看看 是不是字符串没截断呢?
[解决办法]
template <class BidirectionalIterator>void reverse ( BidirectionalIterator first, BidirectionalIterator last){ if(first>=last) return; std::swap (*first++,*last--); reverse(first,last);}
[解决办法]
BCB的HELP
#include <string.h>
#include <stdio.h>
int main(void)
{
char *forward = "string";
printf("Before strrev(): %s\n", forward);
strrev(forward);
printf("After strrev(): %s\n", forward);
return 0;
}
[解决办法]
//*这个是在WIN-TC编译下通过的。*//
#include <stdio.h>
char *setchar(char *str1,char *str2)
{
int len=0;
char *strlen=str1;
char *restr=str2;
strlen=str1;
while(*(strlen++))len++;
strlen-=2;
while(len-->=0)*(restr++)=*(strlen--);
*(restr-1)='\0';
printf("%s\n",str2);
return str2;
}
main()
{int i;
char str1[20],str2[20];
gets(str1);
printf("%s\n",setchar(str1,str2));
getch();
}
[解决办法]
自己看
#include <stdio.h>char * setchar(char *str){ int len = 0, i = 0; char *strlen = str; char *restr = str; while (*strlen++) len++; // strlen -= 2; 这里不用减 len -= 1; // 这里减1 while (len >= 0) {// restr[i] = strlen[len]; // 这句一定错了 char c = str[len]; str[len] = restr[i]; restr[i] = c; i++; len--; } printf("%s \n", restr); return restr;}int main(void){ char str[] = { "FXXXXXX world" }; printf("%s \n", setchar(str)); return 0;}