原标题:常见的C语言字符串操作

#字符串倒序输出

实现逻辑,通过strlen获取字符串长度,然后通过 len/2 进行交叉赋值,这里需要注意,不需要考虑len是奇数还是偶数的问题。

如果len是奇数,最后一个字符就不需要倒序,如果是偶数,最后两个字符就倒序。

#include "stdio.h"

void rechange_str(char *str)

{

int i, len;

char tmp;

if(NULL == str) {

return;

}

len = strlen(str);

for(i = 0; i < len/2; i ++) {

tmp = str[i];

str[i] = str[len-i-1];

str[len-i-1] = tmp;

}

}

int main(void)

{

char str[20] = "hello,world";

printf( "%sn",str);

rechange_str(str);

printf( "%sn",str);

return(0);

}

hello,world

dlrow,olleh

--------------------------------

Process exited after 0.02841 seconds with returnvalue 0

请按任意键继续. . .

#整型转字符串

实现逻辑,每个整数看其转换进制,从个位到十位百位都可以通过%操作加上/操作获得,再用一个字符数组保存0-F。

用个位数对应值转为字符,注意转换出的字符串是反向的,还要考虑传入的若是负数如何处理,再用翻转字符串完成最后整个操作

下面这段代码需要好好研究一下,最好自己运行试试。

#include "stdio.h"

char *sky_itoa(int value, char *str, unsigned int radix)

{

char list[] = "0123456789ABCDEF";

unsigned int tmp_value;

int i, j, k;

if(NULL == str) {

returnNULL;

}

if(2 != radix && 8 != radix && 10 != radix && 16 != radix) {

returnNULL;

}

i = 0;

k = 0;

if(radix == 10 && value < 0) {

tmp_value = (unsigned int)(0 - value);

str[i++] = '-';

k = 1;

} else{

tmp_value = (unsigned int)value;

}

do{

str[i++] = list[tmp_value%radix];

tmp_value /= radix;

} while(tmp_value);

str[i] = '0';

//翻转

char tmp;

for(j = k; j < (i+k)/2; j++) {

tmp = str[j];

str[j] = str[i+k-j-1];

str[i+k-j-1] = tmp;

}

returnstr;

}

int main(void)

{

int a = 1254545;

char str[100] ={0};

printf( "%sn",sky_itoa(a,str,2));

printf( "%sn",sky_itoa(a,str,8));

printf( "%sn",sky_itoa(a,str,10));

printf( "%sn",sky_itoa(a,str,16));

return(0);

}

100110010010010010001

4622221

1254545

132491

--------------------------------

Process exited after 0.02963 seconds with returnvalue 0

请按任意键继续. . .

#字符串复制

实现逻辑,逐个赋值直到遇到'0'停止即可

#include "stdio.h"

char *sky_strcpy(char *dst, const char *str)

{

if(NULL == dst || NULL == str) {

returnNULL;

}

char *ret = dst;

while(*str != '0') {

*dst ++ = *str ++;

}

returnret;

}

int main(void)

{

char str_1[100] = "hello,world";

char str[100] ={0};

sky_strcpy(str,str_1);

printf( "str_1:%sn",str_1);

printf( "str:%sn",str);

return(0);

}

str_1:hello,world

str:hello,world

--------------------------------

Process exited after 0.03334 seconds with returnvalue 0

请按任意键继续. . .

#字符串比较

1、正常比较是否相同 实现逻辑,判断字符串长度是否相同,若相同逐个比较字符是否相同

#include "stdio.h"

int sky_strcmp(char *dst, char *str)

{

int i, len;

if(NULL == dst || NULL == str) {

return0;

}

if(strlen(dst) != strlen(str)) {

return0;

}

len = strlen(dst);

for(i = 0; i < len; i++) {

if(*dst++ != *str++) {

return0;

}

}

return1;

}

int main(void)

{

char str_1[100] = "hello,world";

char str_2[100] = "hello,world";

char str[100] = "adfs";

printf( "%dn",sky_strcmp(str_1,str));

printf( "%dn",sky_strcmp(str_1,str_2));

return(0);

}

0

1

--------------------------------

Process exited after 0.02802 seconds with returnvalue 0

请按任意键继续. . .

2、忽略大小写字符串比较

实现逻辑,在比较字符时可以将其统一转换为大写或小写,然后再进行比对即可,和正常对比无其他不同

#include "stdio.h"

#define CONVERT(c) (((c) >= 'A' && (c) <= 'Z') ? ((c) - 'A' + 'a') : (c))

int sky_strcmp(char *dst, char *str)

{

int i, len;

if(NULL == dst || NULL == str) {

return0;

}

if(strlen(dst) != strlen(str)) {

return0;

}

len = strlen(dst);

for(i = 0; i < len; i++) {

if(CONVERT(*dst) != CONVERT(*str)) {

return0;

}

dst ++;

str ++;

}

return1;

}

int main(void)

{

char str_1[100] = "heLlo,world";

char str_2[100] = "hello,world";

char str[100] = "adfs";

printf( "%dn",sky_strcmp(str_1,str));

printf( "%dn",sky_strcmp(str_1,str_2));

return(0);

}

0

1

--------------------------------

Process exited after 0.04624 seconds with returnvalue 0

请按任意键继续. . .

#memcpy函数实现

实现逻辑,主要就是逐个赋值即可完成

1、不考虑拷贝覆盖问题

#include "stdio.h"

#include "string.h"

void *sky_memecpy(void *dst, const void *str, int n)

{

if(NULL == dst || NULL == str || n <= 0) {

returnNULL;

}

char *pdst = (char *)dst;

char *pstr = (char *)str;

while(n --) {

*pdst ++ = *pstr ++;

}

returndst;

}

int main(void)

{

char str_1[100] = "heLlo,world";

char str_2[100] = "sdfsdfs";

sky_memecpy(str_2,str_1,strlen(str_1));

printf( "%sn",str_2);

return(0);

}

heLlo,world

--------------------------------

Process exited after 0.02516 seconds with returnvalue 0

请按任意键继续. . .

2、考虑拷贝覆盖问题

拷贝覆盖是我们在拷贝字符串的时候需要注意的一个问题,我下面的示例程序,使用第一个函数的时候,就出现了问题,使用第二个函数就没有出现问题。

原因是,我们源字符串和目的字符串的地址都是一样的,我们希望把字符串往后移动一个位置,但是实际上出现了问题。

#include "stdio.h"

#include "string.h"

void *sky_memecpy_1(void *dst, const void *str, int n)

{

if(NULL == dst || NULL == str || n <= 0) {

returnNULL;

}

char *pdst = (char *)dst;

char *pstr = (char *)str;

while(n --) {

*pdst ++ = *pstr ++;

}

returndst;

}

void *sky_memecpy(void *dst, const void *str, int n)

{

if(NULL == dst || NULL == str || n <= 0) {

returnNULL;

}

char *pdst = (char *)dst;

char *pstr = (char *)str;

if(pdst > pstr && pdst < pstr + n) {

pdst = pdst + n - 1;

pstr = pstr + n - 1;

while(n --) {

*pdst -- = *pstr --;

}

} else{

while(n --) {

*pdst ++ = *pstr ++;

}

}

returndst;

}

int main(void)

{

char str_1[100] = "heLlo,world";

char str_2[100] = "heLlo,world";

sky_memecpy_1(str_1+1,str_1,strlen(str_1));

printf( "%sn",str_1);

sky_memecpy(str_2+1,str_2,strlen(str_2));

printf( "%sn",str_2);

return(0);

}

hhhhhhhhhhhh

hheLlo,world

--------------------------------

Process exited after 0.02773 seconds with returnvalue 0

请按任意键继续. . .

针对上面的拷贝覆盖问题,单独写了一个测试程序

#include "stdio.h"

#include "string.h"

void *sky_memecpy(void *dst, const void *str, int n)

{

if(NULL == dst || NULL == str || n <= 0) {

returnNULL;

}

char *pdst = (char *)dst;

char *pstr = (char *)str;

while(n --) {

printf( "dst:%c--->str:%cn",*pdst,*pstr);

*pdst ++ = *pstr ++;

}

returndst;

}

int main(void)

{

char str_1[100] = "heLlo,world";

sky_memecpy(str_1+1,str_1,strlen(str_1));

printf( "%sn",str_1);

return(0);

}

dst:e--->str:h

dst:L--->str:h

dst:l--->str:h

dst:o--->str:h

dst:,--->str:h

dst:w--->str:h

dst:o--->str:h

dst:r--->str:h

dst:l--->str:h

dst:d--->str:h

dst: --->str:h

hhhhhhhhhhhh

--------------------------------

Process exited after 0.02575 seconds with returnvalue 0

请按任意键继续. . .

初始的时候,dst指向 e 字符,str 指向h 字符,然后每次都是dst先移动,str再移动,就出现了dst被h字符所覆盖。返回搜狐,查看更多

责任编辑:

c语言生命字符串,常见的C语言字符串操作相关推荐

  1. html脚本语言有哪些,常见的脚本语言(有哪些)

    常见的脚本语言 脚本言语:脚本言语又被称为扩建的言语,或者动态言语,是一种编程言语,用bai来操控软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解说或编译. 言语分类: Shell ...

  2. 语言缩写c-a,常见的国家语言缩写以及语言的代码

    语言缩写          语言种类          语言代码 chs                  简体中文           0804 cht                   繁体中文 ...

  3. python字符串常见方法

    python字符串 1.字符串是什么? 字符串是由一个个字符组合起来的串.字符是什么?字符是一串编码.编码是什么?编码是别人规定的字节码. 2. 字符串如何定义 str1='我是字符串' str2=& ...

  4. c语言字符串函数难题,一些常见的C语言字符串操作

    #字符串倒序输出 实现逻辑,通过strlen获取字符串长度,然后通过 len/2 进行交叉赋值,这里需要注意,不需要考虑len是奇数还是偶数的问题. 如果len是奇数,最后一个字符就不需要倒序,如果是 ...

  5. c语言字符串的一般操作有,面试必备——常见的C语言字符串操作

    原标题:面试必备--常见的C语言字符串操作 面试中常见的C语言字符串操作,快来看看,是否对你有帮助! 字符串倒序输出 实现逻辑,通过strlen获取字符串长度,然后通过 len/2 进行交叉赋值,这里 ...

  6. (C语言)常见字符函数和字符串函数

    我们都知道,在C语言里有string.h这个头文件,但是C语言里没有string这个类型. 字符串通常放在常量字符串中或者字符数组中,字符串常量适用于那些对她不做修改的字符串函数. string.h这 ...

  7. C语言基础1:初识C语言(转义、注释;数组、操作符、反码、补码、static、define、指针、结构体常变量;局部变量;作用域、生命周期)

    文章目录 C语言基础1:初识C语言 1.C语言简介 1.1什么是C语言 1.2C语言的发展 2.第一个C语言程序 2.1创建项目 2.2添加源文件 2.3写代码 3.数据类型 4.变量.常量 4.1定 ...

  8. 初识C语言(1)(2)(3)(4) C语言入门 保姆级教程 变量 常量 字符串 转义字符 操作符 关键字 字符串 指针 函数 结构体 数组 选择语句 循环语句

    一.如何写C语言代码 1.编译器 2.创建项目 3.创建源文件 4.写代码 5.编译+链接+运行 项目名字不要汉语,不要特殊字符,不要加空格,项目路径一般为你想要的路径 C语言中,一般创建.c源文件, ...

  9. c语言编程字符串_C编程中的字符串

    c语言编程字符串 Strings in C programming are an array of characters with a NULL character ('\0') appended a ...

最新文章

  1. Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
  2. oracle1537,dataguard 出现ORA-16136错误
  3. R语言:paste函数解析
  4. js 计算任意凸多边形内最大矩形_题库 | 计算机视觉常见面试题型介绍及解答 第 7 期...
  5. tablemodel dapter区别
  6. 2019 微软Build大会预告:值得开发者期待的是哪些?
  7. P2852 [USACO06DEC]Milk Patterns G
  8. 283. 移动零golang
  9. 操作系统之计算机系统概述:7、操作系统的体系结构
  10. 通示jQuery实例方法,未DOM对象添加多个方法
  11. Java中ArrayList、Integer[]和int[]的相互转换
  12. 中国甲真菌病药物行业市场供需与战略研究报告
  13. ConTeXt 文稿的逻辑结构
  14. 小白一枚。。。记录下这种构造函数
  15. 一步一步打造WebIM(1) (转载)
  16. bjui 公共的弹窗确认 取消 改变文字
  17. 尔雅网络选课 大学计算机知识,2017-2018学年第1学期超星尔雅网络课程选课指南.PDF...
  18. 在日本申报个人所得税流程
  19. 笔记本电脑显示dns服务器出错,电脑出现dns错误无法上网的解决方法详解
  20. android 网络编程 注册登录,android网络编程_自寻址套接字DatagramPacket

热门文章

  1. 代码推不上去,gitlab 推不上去代码,github访问不了,coding代码提不上去
  2. linux环境配置gvim
  3. 屏蔽ViewPager的左右滑动和切换时的滚动动画
  4. Python网络编程之day01-网络编程基础
  5. Temporal框架学习
  6. 利用外观模式模拟股民炒股 C++
  7. 雅特力单片机开发笔记
  8. 问题解决:Python | 字符串去除(中文、英文、数字、标点符号)
  9. HTTP协议的详解(简单易懂)
  10. win7 凭据管理 永久性-企业 和 永久性-登录会话