小白的白 @ 2017-03-28 00:18:33
#include<stdio.h>
#include<string.h>
int main()
{
char str[15],*p;
p=str;
gets(str);
if(str[0]=='-'){//如果是负数,指针移动一位,提前输出符号
p++;
printf("-");
}
strrev(p);//反转字符串
while(*p=='0')//找到第一个非零数
p++;
if(*p=='0')//如果最后一位是零则指针后退一位
p--;
puts(p);
return 0;
}
by 小白的白 @ 2017-03-28 00:23:15
/tmp/tmpyy9qiu.cpp: In function 'int main()':
/tmp/tmpyy9qiu.cpp:7:2: warning: 'char* gets(char*)' is deprecated (declared at /tmp/runtime/include/stdio.h:638) [-Wdeprecated-declarations]
gets(s);
^ /tmp/tmpyy9qiu.cpp:7:8: warning: 'char* gets(char*)' is deprecated (declared at /tmp/runtime/include/stdio.h:638) [-Wdeprecated-declarations]
gets(s);
^ /tmp/tmpyy9qiu.cpp:12:10: error: 'strrev' was not declared in this scope
strrev(p);
^ 这是提示信息,指针用的应该没错,strrev函数也在头文件string.h中,为什么会是编译错误呢?
by Lolierl @ 2017-03-28 07:02:21
1.你用cin不就行了
2.多写三四行代码,把那个我都没见过的strrev换掉
3.puts我也不知道是什么东西,还是cout靠谱
最后加一行using,保证AC
by 巨型方块 @ 2017-03-28 07:43:18
by frankchenfu @ 2017-03-28 13:27:47
@KingLolierl 不是我说你,你自己用C++连C的常识都没有,你玩什么啊。puts是输出字符串的,gets是读入的,不知道比你的cin和cout高到哪里去了!
by frankchenfu @ 2017-03-28 13:30:36
using namespace std;又不是必须要加的;#include<cstring>就等于#include<string.h>(Cpp),而C只能用string.h
by Lolierl @ 2017-03-28 15:21:46
@frankchenfu
对不起,我不知道这是C
既然是C,你来指错吧
by 小白的白 @ 2017-03-28 16:37:28
@巨型方块
这个头文件是C++的么?
by 巨型方块 @ 2017-03-28 18:17:06
@小白的白 en
by 巨型方块 @ 2017-03-28 18:18:00
string是c++的东西
cstring是从c里面拷贝过来的
by 小白的白 @ 2017-03-28 22:11:57
谢谢大家了,已经解决了。原因是strrev属于非标准函数,部分编译器不予支持,只要再写一个反转字符串的自定义函数就行了。
#include<stdio.h>
#include<string.h>
void srev(char* str);//有一些网站的编译器不识别strrev函数,注意积累自写函数
int main()
{
char str[15],*p;
p=str;
scanf("%s",str);
if(str[0]=='-'){//如果是负数,指针向后移动一位,提前输出负号
p++;
printf("-");
}
srev(p);//反转字符串
while(*p=='0')//找到第一个非零数
p++;
if(*p=='0')//如果最后一位是零则指针后退一位
p--;
puts(p);
return 0;
}
void srev(char* str)
{
int i,len;
char t;
len=strlen(str);//注意数组下标从0开始
for(i=0;i < len/2; i++){
t=str[i];
str[i]=str[len-i-1];
str[len-i-1]=t;
}
}