首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-11-09 
字符串的问题,求高手帮看#includestdio.h#includestring.h#define MAX 100void strrev(char* &s){int

字符串的问题,求高手帮看
#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;    }}
[解决办法]
你是要单词逆置还是一句话逆置?

热点排行