c语言生命字符串,常见的C语言字符串操作
原标题:常见的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语言字符串操作相关推荐
- html脚本语言有哪些,常见的脚本语言(有哪些)
常见的脚本语言 脚本言语:脚本言语又被称为扩建的言语,或者动态言语,是一种编程言语,用bai来操控软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解说或编译. 言语分类: Shell ...
- 语言缩写c-a,常见的国家语言缩写以及语言的代码
语言缩写 语言种类 语言代码 chs 简体中文 0804 cht 繁体中文 ...
- python字符串常见方法
python字符串 1.字符串是什么? 字符串是由一个个字符组合起来的串.字符是什么?字符是一串编码.编码是什么?编码是别人规定的字节码. 2. 字符串如何定义 str1='我是字符串' str2=& ...
- c语言字符串函数难题,一些常见的C语言字符串操作
#字符串倒序输出 实现逻辑,通过strlen获取字符串长度,然后通过 len/2 进行交叉赋值,这里需要注意,不需要考虑len是奇数还是偶数的问题. 如果len是奇数,最后一个字符就不需要倒序,如果是 ...
- c语言字符串的一般操作有,面试必备——常见的C语言字符串操作
原标题:面试必备--常见的C语言字符串操作 面试中常见的C语言字符串操作,快来看看,是否对你有帮助! 字符串倒序输出 实现逻辑,通过strlen获取字符串长度,然后通过 len/2 进行交叉赋值,这里 ...
- (C语言)常见字符函数和字符串函数
我们都知道,在C语言里有string.h这个头文件,但是C语言里没有string这个类型. 字符串通常放在常量字符串中或者字符数组中,字符串常量适用于那些对她不做修改的字符串函数. string.h这 ...
- 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定 ...
- 初识C语言(1)(2)(3)(4) C语言入门 保姆级教程 变量 常量 字符串 转义字符 操作符 关键字 字符串 指针 函数 结构体 数组 选择语句 循环语句
一.如何写C语言代码 1.编译器 2.创建项目 3.创建源文件 4.写代码 5.编译+链接+运行 项目名字不要汉语,不要特殊字符,不要加空格,项目路径一般为你想要的路径 C语言中,一般创建.c源文件, ...
- c语言编程字符串_C编程中的字符串
c语言编程字符串 Strings in C programming are an array of characters with a NULL character ('\0') appended a ...
最新文章
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- oracle1537,dataguard 出现ORA-16136错误
- R语言:paste函数解析
- js 计算任意凸多边形内最大矩形_题库 | 计算机视觉常见面试题型介绍及解答 第 7 期...
- tablemodel dapter区别
- 2019 微软Build大会预告:值得开发者期待的是哪些?
- P2852 [USACO06DEC]Milk Patterns G
- 283. 移动零golang
- 操作系统之计算机系统概述:7、操作系统的体系结构
- 通示jQuery实例方法,未DOM对象添加多个方法
- Java中ArrayList、Integer[]和int[]的相互转换
- 中国甲真菌病药物行业市场供需与战略研究报告
- ConTeXt 文稿的逻辑结构
- 小白一枚。。。记录下这种构造函数
- 一步一步打造WebIM(1) (转载)
- bjui 公共的弹窗确认 取消 改变文字
- 尔雅网络选课 大学计算机知识,2017-2018学年第1学期超星尔雅网络课程选课指南.PDF...
- 在日本申报个人所得税流程
- 笔记本电脑显示dns服务器出错,电脑出现dns错误无法上网的解决方法详解
- android 网络编程 注册登录,android网络编程_自寻址套接字DatagramPacket