读书人

字符串的有关问题求高手帮看

发布时间: 2012-11-09 10:18:48 作者: rapoo

字符串的问题,求高手帮看
#include<stdio.h>
#include<string.h>
#define MAX 100




void strrev(char* &s){
int len = strlen(s);
char str[MAX];
int k=0;
for(int i=len-1;i>=0;i--){
str[k++]=s[i];
}
strcpy(s,str);

}

int main() {
int cases,n;
char s[MAX];
char ch;
scanf("%d%d",&cases,&n);
fflush(stdin); //刷新缓冲区或者使用getchar();
while(cases--) {
while(n--) {

while(1) {
scanf("%s",s);
ch=getchar();
strrev(s);
if(ch!='\n') {
printf("%s ",s);
} else {
printf("%s\n",s);
break;
}

}
}
}


return 0;
}




以上代码完成字符串在单词原来的位置上进行倒转。。。能运行处正常结果但是ACM通不过。。错误如下:

p.cc: In function 'int main()':
p.cc:31: error: invalid initialization of non-const reference of type 'char*&' from a temporary of type 'char*'
p.cc:8: error: in passing argument 1 of 'void strrev(char*&)'

意思我也明白,就是要设置成常量,显然我不希望设置成常量,我本来就要修改,怎么办呢??

测试数据如下:
1

3
I am happy today
To be or not to be
I want to win the practice contest


输出效果:
I ma yppah yadot
oT eb ro ton ot eb
I tnaw ot niw eht ecitcarp tsetnoc



补充:1表示1组测试,3表示3句英文

[解决办法]
反转函数改成这样:

C/C++ code
void strrev(char* s){    char* p = s;    char* q = s + strlen(s) - 1;    char ch;    while(p != q)    {        ch = *p;        *p++ = *q;        *q-- = ch;    }}
[解决办法]
你是要单词逆置还是一句话逆置?

读书人网 >C++

热点推荐