字符串的有关问题,求高手帮看
字符串的问题,求高手帮看
#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句英文
------解决方案--------------------
反转函数改成这样:
#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; } }
------解决方案--------------------
你是要单词逆置还是一句话逆置?