读书人

字符串逆序打印 高手来看看~解决思路

发布时间: 2012-04-02 19:58:59 作者: rapoo

字符串逆序打印 高手来看看~
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 }

打印出来是乱码 ..............
高手给看看 是不是字符串没截断呢?



[解决办法]

C/C++ code
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();
}
[解决办法]
自己看
C/C++ code
#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;} 

读书人网 >C++

热点推荐