C语言字符串另类用法的实现

 更新时间:2018年12月19日 10:48:26   作者:Engineer-Bruce_Yang  
今天小编就为大家分享一篇关于C语言字符串另类用法的实现,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

讲这个例子前,咱们先来看一个简单的程序:

字符串数组实现数字转字母:

#include <stdio.h>
#include <string.h>
int main(void)
{
 int num = 15 ;
 //26个字母 
 const char str[] = "abcdefghijklmnopqlstuvwxyz" ;
 //这个做法是将num这个十进制数通过取模转换为字母并输出,从程序看,即可知道是输出p 
 char a = str[num%26] ;
 printf("a=%c\n",a);
 return 0 ; 
} 

当然我们也可以这么写,用指针的形式来表示:

#include <stdio.h>
#include <string.h>
int main(void)
{
 int num = 15 ;
 char *str = "abcdefghijklmnopqlstuvwxyz" ;
 char a = str[num%26] ;
 printf("a=%c\n",a);
 return 0 ; 
} 

同样的,结果也是和上面是一样的,我们再对这种写法进行简化,如果初学者的基础不扎实,也许一看就懵了。

#include <stdio.h>
#include <string.h>
int main(void)
{
 int num = 15 ;
 //char *str = "abcdefghijklmnopqlstuvwxyz" ;
 char a = "abcdefghijklmnopqlstuvwxyz"[num%26] ;
 printf("a=%c\n",a);
 return 0 ; 
} 

其实不用惊讶,这样的写法和前面两种的意思是一样的,只不过将str替换成了一串字符串。正是因为有了这种做法,所以在写进制转换的时候,可以使用这样的技巧来实现,当然,作为开发者,写出可读性高的代码来说,我并不推崇这样的写法。

既然可以向上面这么写,那也就可以向下面这么写,输出的结果是4个3。

#include <stdio.h>
int main(void)
{
 char *p = "0123456789abcdef" ;
 putchar(p[3]);
 //换行 
 putchar('\n');
 putchar(*(p + 3));
 putchar('\n');
 putchar("0123456789abcdef"[3]);
 putchar('\n');
 putchar(*("0123456780abcdef"+3));
 putchar('\n');
 return 0 ; 
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • 深入浅析C++的new和delete

    深入浅析C++的new和delete

    new和delete既是C++中的关键字也是一种特殊的运算符。这篇文章主要介绍了C++的new和delete详解,需要的朋友可以参考下
    2018-02-02
  • 关于数组做函数参数的问题集合汇总

    关于数组做函数参数的问题集合汇总

    本文是对关于数组做函数参数的问题进行了详细的汇总,需要的朋友可以过来参考下。希望对大家有所帮助
    2013-10-10
  • C++哈希应用之位图,哈希切分与布隆过滤器详解

    C++哈希应用之位图,哈希切分与布隆过滤器详解

    这篇文章主要为大家详细介绍了C++哈希应用中的位图、哈希切分与布隆过滤器,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
    2023-04-04
  • C++变量和基本类型详解

    C++变量和基本类型详解

    这篇文章主要介绍了C++变量和基本类型,,一定要注意局部变量与全局变量的作用范围,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10
  • 全局静态存储区、堆区和栈区深入剖析

    全局静态存储区、堆区和栈区深入剖析

    在C++中,内存可分为系统数据区,自由存储区,文本区,const数据区,全局静态区,堆区和栈区
    2012-11-11
  • 关于C/C++中的side effect(负效应)和sequence point(序列点)

    关于C/C++中的side effect(负效应)和sequence point(序列点)

    不知你在写code时是否遇到这样的问题?int i = 3; int x = (++i) + (++i) + (++i); 问x值为多少?进行各种理论分析,并在编译器上实践,然而可能发现最终的结果是不正确的,也是不稳定的,不同的编译器可能会产生不同的结果。这让人很头疼
    2013-10-10
  • Qt禁止程序多开的实现示例

    Qt禁止程序多开的实现示例

    本文主要介绍了Qt 禁止程序多开的实现示例,主要介绍了三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • C++设计模式之备忘录模式

    C++设计模式之备忘录模式

    这篇文章主要介绍了C++设计模式之备忘录模式,本文讲解了什么是备忘录模式、备忘录模式的UML类图、备忘录模式的使用场合等内容,需要的朋友可以参考下
    2014-10-10
  • C语言绘制三角函数曲线

    C语言绘制三角函数曲线

    这篇文章主要为大家详细介绍了C语言绘制三角函数曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C++移动操作,RVO和NRVO详细

    C++移动操作,RVO和NRVO详细

    本文将讨论了何时C++会自动进行移动操作,并且说明了复制消除,RVO和NRVO优的化等香瓜吧资料,需要的小伙伴可以参考一下
    2021-09-09

最新评论