A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CrazyMan 中级黑马   /  2014-12-3 23:58  /  2078 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

strrev函数怎么调用呢??

12 个回复

倒序浏览
求顶一下
回复 使用道具 举报
  1. #include <stdio.h>
  2. #include <string.h>

  3. #include <stdlib.h>

  4. int _tmain(int argc, _TCHAR* argv[])
  5. {
  6.         char * str = "Hi, My name is heima!";

  7.         printf("%s\n%s",str,strrev(strdup(str)));

  8.         system("pause");
  9.         return 0;
  10. }
复制代码

原型:extern char *strrev(char *s);
功能:strrev()函数作用是使一个字符串中所有字符颠倒过来。
这里需要配合strdup()函数的时候,目的是为字符串创建一个副本,重新分配空间,否则会报中断错误。
回复 使用道具 举报
。烊了 发表于 2014-12-4 16:05
原型:extern char *strrev(char *s);
功能:strrev()函数作用是使一个字符串中所有字符颠倒过来。
这里 ...

可不可以说详细一点,在xcode上老有警告,而且运行不出来
回复 使用道具 举报
CrazyMan 发表于 2014-12-4 19:24
可不可以说详细一点,在xcode上老有警告,而且运行不出来

其实功能很简单的,
例如: 有字符串“GagaHaha”
调用strrev()函数后,字符串就变成“ahaHagaG”了,完全倒过来了
并且编译器会为这个倒转过来的字符串分配内存空间,
回复 使用道具 举报
。烊了 发表于 2014-12-4 19:35
其实功能很简单的,
例如: 有字符串“GagaHaha”
调用strrev()函数后,字符串就变成“ahaHagaG”了,完 ...

我就是想用它的反转,但为什么我调用时在xcode上老编译错误
回复 使用道具 举报
CrazyMan 发表于 2014-12-5 16:00
我就是想用它的反转,但为什么我调用时在xcode上老编译错误

你可能需要 把  strrev() 写成  _strrev()  、  strdup() 写成 _strdup()  这样可能就不报错误了
回复 使用道具 举报
。烊了 发表于 2014-12-5 17:14
你可能需要 把  strrev() 写成  _strrev()  、  strdup() 写成 _strdup()  这样可能就不报错误了 ...

//用一个字符串保存转换的结果(str[80)假设十进制数为number,转换的进制为digits,则将numbers%digits(根据余数的情况做相应处理)结果保存在字符串str中,将numbers变为numbers/digits;直到numbers为零。得到的结果为逆序,需要将其倒转,倒转后即为所求。
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
void TentoAny(int number,char *str,int digits)
{
        int i=0;
    int j=0;
        if(digits>16||digits<2)//非2~16进制则直接退出
        return ;
        while(number)
        {
                switch(number%digits)
                {//根据余数的情况做相应处理
                        case 15:
                str[i++]='F';
                break;
                        case 14:
                str[i++]='E';
                break;
            case 13:
                str[i++]='D';
                break;
            case 12:
                str[i++]='C';
                break;
            case 11:
                str[i++]='B';
                break;
            case 10:
                str[i++]='A';
                break;
            default:
                str[i++]=number%digits+'0';
                break;
                }
                number=number/digits;
        }
        str='\0';
   _strrev(str);
        //strrev函数定义在string.h中的,是对字符串做逆序处理的函数这里需要逆序的原因是因为得到的结果为该进制的逆序
}

int main()
{
        int number,i ;
   
        char str[80];
        printf("输入一个十进制数:");
        scanf("%d",&number);
        printf("\n---------2到16进制对应关系----------\n");
        for(i=2;i<=16;i++)
        {
                TentoAny(number,str,i);
                printf("%d转换为%d进制为:%d\n",number,i,_strrev(_strdup(str)) );
        }
        return 0;
}
还是有警告

屏幕快照 2014-12-05 下午8.55.40.png (41.98 KB, 下载次数: 4)

屏幕快照 2014-12-05 下午8.55.40.png
回复 使用道具 举报
CrazyMan 发表于 2014-12-6 12:54
//用一个字符串保存转换的结果(str[80)假设十进制数为number,转换的进制为digits,则将numbers%digits ...

这就是编译器的原因了,我用的VS就不报警告,
回复 使用道具 举报
。烊了 发表于 2014-12-6 13:00
这就是编译器的原因了,我用的VS就不报警告,

好吧,谢谢你了:'(
回复 使用道具 举报

谢我就赏点黑马币吧  哈哈哈  :#:#:#

评分

参与人数 1黑马币 +1 收起 理由
CrazyMan + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
。烊了 发表于 2014-12-6 15:59
谢我就赏点黑马币吧  哈哈哈

给你赏一个
回复 使用道具 举报
支持 赞一个  顶一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马