[c/c++] programming之路(23)、字符串(四)——strncat,atoi,strcmp,strlen等,以及常用内存函数
一、strncat及自行封装实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> //<string.h>是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。
//<cstring>是C++版本的<string.h>
//<string>定义了一个string的字符串类,包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。
//但<string>又包含了老的C版本的字符串操作如strcpy、strcat等 void main() {
char str[] = "yincheng";
char str1[] = "8848.88";
strncat(str, str1, );//从str1中拷贝4个字节到str
printf("%s\n", str);
system("pause");
}

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h> void mystrncat(char *bc, char *c, int length)
{
if (bc == NULL || c == NULL || length == )
return;
char *p = bc;
while (*p)
p++;
//循环结束后,p指向了字符串的末端'\0'
for (int i = ; i < length; i++)
{
*p = c[i];
p++;
}
*p = '\0';
} void main() {
char str[] = "task";
char str1[] = "list8848.88";
mystrncat(str, str1, );
printf("%s\n", str);
system(str);
system("pause");
}
二、atoi
#include<stdio.h>
#include<stdlib.h> void main() {
char str[] = "88e48";
//int num = atoi(str);//8848
//int num = atoi(str+1);//
int num = atoi(str);// char s1[] = "88e48";
//int n1 = atoi(s1);//
int n1 = atoi(s1+);// char s2[] = "e8848";
//int n2 = atoi(s2);//
int n2 = atoi(s2 + );// printf("%d\n", n2);
system("pause");
}
三、strrev(字符串逆转)
#include<stdio.h>
#include<stdlib.h>
#include<string.h> void mystrrev(char *p) {
int length = strlen(p);//获取字符串长度
for (int i = ; i < length/; i++)//length必须除以2,不然字符对调之后又调回去了
{
char temp = p[i];
p[i] = p[length - - i];
p[length - - i] = temp;
}
} void main() {
char str[] = "yincheng8848a";
printf("原来字符串 %s\n", str);
//_strrev(str);
mystrrev(str);
printf("后来字符串 %s\n", str);
system("pause");
}

四、strupr和strlwr(大小写转换)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> void tobig(char *p) {
while (*p)
{
if ((*p)>= 'a'&&(*p) <= 'z')
*p -= ;
p++;
}
} void main() {
char str[] = "notepad";
//_strupr(str);//小写转大写
//toupper用法; #include<cctype> ch = toupper(ch);//ch是一个字符
tobig(str);
printf("%s\n", str); char str1[] = "TASKLIST";
_strlwr(str1);//大写转小写
printf("%s\n", str1); system("pause");
}

五、strlen
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int mystrlen(char *p) {
int i = ;
while (*p) {
i++;
p++;
}
return i;
} void main() {
char str[] = "i love iphone";//str是变量
char *p = "i love china";//常量
int len1 = strlen(str);
int len2 = mystrlen(p); printf("str=%d,p=%d\n",len1,len2); system("pause");
}

六、strcat(字符串拼接)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> char * mystrcpy(char *dst,char *src) {
char *p = dst;
if (dst == NULL || src == NULL)
return NULL;
while (*src) {
*dst = *src;
dst++;
src++;
}
*dst = '\0';
return p;
} char * mystrcat(char *dst, char *src) {
char *p = dst;
if (dst == NULL || src == NULL)
return NULL;
while (*dst)
dst++;
while (*src) {
*dst = *src;
dst++;
src++;
}
*dst = '\0';
return p;
} void main() {
char str1[] = "note";
char str2[] = "pad";
char str[];
printf("%s\n", mystrcpy(str, str1));
//mystrcpy(str, str1);//复制
printf("%s\n", str);
//strcat(str, str2);//拼接
mystrcat(str, str2);//拼接
printf("%s\n", str);
system(str);
} void main0() {
char str1[] = "note";
char str2[] = "pad";
char str[];
sprintf(str, "%s%s", str1, str2);
system(str);
system("pause");
}

七、strchr(查找某字符是否在字符串中)
#include<stdio.h>
#include<stdlib.h>
#include<string.h> char * mystrchr(char *dst,char ch) {
if (dst == NULL)
return NULL;
while (*dst) {
if (*dst == ch)
return dst;
dst++;
}
return NULL;
} void main() {
char str[] = "i love china";
char ch='o';
/*char *p = strchr(str, ch);*/
char *p = mystrchr(str, ch);
if(p==NULL)
printf("没找到\n");
else
printf("值%c,地址%x\n",*p,p); system("pause");
}

八、strcmp(比较两字符串是否相等)
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int mystrcmp(char *p1,char *p2) {
int l1 = strlen(p1);
int l2 = strlen(p2);
if (l1 != l2)
return -;
else {
for (;*p1;p1++,p2++)
{
if (*p1 != *p2)
return -;
}
}
return ;
} void main() {
char str1[] = "note";
char str2[] = "note";
/*if (strcmp(str1,str2)==0)*/
if (mystrcmp(str1, str2) == )
printf("相等\n");
else
printf("不相等\n");
system("pause");
} void main0() {//无论相等还是不等,都输出不等
char str1[] = "note";
char str2[] = "note";
if(str1==str2)//c语言判断字符串不能这样
printf("相等\n");
else
printf("不相等\n");
system("pause");
}
实现排序
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> void main() {
char str[][] = {"apple","google","IBM","Intel","Microsoft","baidu","ali","tencent","","Sun"};
printf("排序之前\n");
for (int i = ; i < ; i++)
printf("%s\n", str[i]);
printf("排序之后\n");
//冒泡排序
for (int i = ; i < -; i++)
{
for (int j = ; j < - - i; j++)
{
if (strcmp(str[j], str[j+]) > ) {
//交换字符串,不可以用赋值号
char temp[];
strcpy(temp, str[j]);
strcpy(str[j],str[j+]);
strcpy(str[j+],temp);
}
}
}
for (int i = ; i < ; i++)
{
printf("%s\n", str[i]);
} system("pause");
}

八、strstr(在字符串中查找是否包含另一个字符串)
#include<stdio.h>
#include<stdlib.h>
#include<string.h> char * mystrstr(char *allstr,char *str) {
if (allstr == NULL || str == NULL)
return NULL;
int all_len = strlen(allstr);
int str_len = strlen(str);
for (int i = ; i <all_len-str_len+; i++)
{
int flag = ;//标示,假定字符串一开始相等
for (int j = ; j <str_len; j++)
{
if (allstr[i + j] != str[j]) {
flag = ;
break;
}
}
if (flag)
return allstr+i; //返回找到的地址
}
return NULL;
} void main() {
char allstr[] = "i love china i love cpp";
char str[] = "china";
//char *p = strstr(allstr, str);//检索
char *p = mystrstr(allstr, str);//检索
if(p==NULL)
printf("没找到\n");
else
printf("值%c,地址%x\n",*p,p);
system("pause");
}
九、常用内存函数
1.memset
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<memory.h>//内存操作函数 void main() {
char str[] = "i love china i love c i love cpp";
//第一个参数是内存的首地址,第二个参数是要设置的字符
//第三个参数是整数,从首地址开始前进多少字节,把这一段设置为该字符
memset(str, 'A', );
printf("%s\n",str);
memset(str, 'A', );
printf("%s\n", str);
memset(str, '\0',strlen(str));//清空字符串
printf("%s\n", str);
system("pause");
}

2.memcpy
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<memory.h>//内存操作函数 void main0() {
char str[] = "yincheng8848";
char str1[] = "hello c";
printf("%s\n", str);
//memcpy:从地址str开始,从str1处拷贝5个字节到str
memcpy(str,str1,);
printf("%s\n",str); system("pause");
} void main() {
int a[] = { ,,,, };
int b[] = { ,,,, };
memcpy(a,b, );//每个元素4个字节,两个元素8个字节
//memcpy按照内存字节来拷贝,不管是什么类型,都是拷贝二进制类型
for (int i = ; i < ; i++)
{
printf("%d\n",a[i]);
}
system("pause");
}


3.memccpy
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<memory.h>//内存操作函数 void main() {
char str[] = "yincheng8848";
char str1[] = "hello c";
printf("%s\n", str);
_memccpy(str,str1,'l',);
//memccpy:如果str1没有字符‘l’,就等价于memcpy,读取7个字符拷贝到str
//如果有,读取拷贝到该字符就停止
printf("%s\n",str); system("pause");
}

4.memchr
#include<stdio.h>
#include<memory.h> void main() {
char str[] = "helloyincheng";
char ch='c';
char *p =(char *) memchr(str, 'c', );
//从地址str开始,前进30个字节检索
//如果存在,返回地址,否则返回空
if (p == NULL)
printf("没找到\n");
else
printf("找到字符%c,地址%p", *p, p);
getchar();
}

5.memicmp
#include<stdio.h>
#include<stdlib.h>
#include<memory.h> void main() {
char *buf1 = "ABCDE123";
char *buf2 = "abcde456";
int num = _memicmp(buf1, buf2, );
//memicmp判断字符串前面几个字节是否相等
//忽略大小写,相等返回0,反之非0
if (num == )
printf("忽略大小写的情况下,相等");
else
printf("不等"); getchar();
}

[c/c++] programming之路(23)、字符串(四)——strncat,atoi,strcmp,strlen等,以及常用内存函数的更多相关文章
- Python之路【第四篇】: 函数、递归、内置函数
一. 背景提要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码 while True: i ...
- GO语言的进阶之路-Golang字符串处理以及文件操作
GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Python之路,第四篇:Python入门与基础4
Python3 字符串 字符串是一个有序的字符序列 如何表示一个字符串: 在非注释中凡是用引号括起来的部分都是字符串: ‘ 单引号 ” 双引号 ‘’‘ 三单引号 “”“ ...
- 孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成
孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天经过反复折腾,最终基本上算 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- Linux C 字符串函数 strlen()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy() 详解
strlen(返回字符串长度) 表头文件 #include <string.h> 定义函数 size_t strlen(const char *s); 函数说明 strlen()用来计 ...
- 【C语言】10-字符和字符串常用处理函数
一.字符处理函数 下面介绍的两个字符处理函数都是在stdio.h头文件中声明的. 1.字符输出函数putchar putchar(65); // A putchar('A'); // A int a ...
- ylb:SQLServer常用系统函数-字符串函数、配置函数、系统统计函数
原文:ylb:SQLServer常用系统函数-字符串函数.配置函数.系统统计函数 ylbtech-SQL Server:SQL Server-SQLServer常用系统函数 -- ========== ...
随机推荐
- Mysql order by与limit混用陷阱
在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N. ...
- 11.9luffycity(4)
2018-11-9 17:57:09 明天开始自己独立写luffy部分表的接口, 越努力,越幸运!永远不要高估自己! 明天后天先不想下看视频,把接口做完,然后整理一下笔记,温故而习之,可以为师啊! 知 ...
- react recompose
避免写嵌套 import { compose } from "recompose"; function Message(props) { const { classes } = p ...
- 微信小程序模拟点击出现问题解决方法
move tools=>sensors=>Touch:Device-based 如果不行就换成Touch:force enabled,这俩个选择反复更换试试
- eclipse解决js提示
自学js,发现eclipse中不管js文件.html文件.jsp文件没有都没js代码的提示,对于js代码也不报错,有时候就因为单词敲错却查了很久没查出来,很烦很难受. 在网上找了很多方法,都没有解决, ...
- vue中子传父,父传子的具体用法
先说明下父组件Login,子组件signCon 子拿到父数据可以通过,在子组件里面设置props:['name']的方法拿到. 首先在父组件中定义数据了: data(){Englishname:'li ...
- dubbo控制器xml文件报错
在配置dubbo服务的过程中,经常会遇到虽然程序能够跑起来,但是配置文件一堆红叉,虽然不影响功能,但是确实很让人恶心. 报错信息如下: Multiple annotations found at th ...
- day14 十四、三元运算符,推导式,匿名内置函数
一.三元(目)运算符 1.就是if...else...语法糖 前提:if和else只有一条语句 # 原来的做法 cmd = input('cmd:>>>') if cmd.isdig ...
- 简单理解php深复制浅复制问题
其实接触深复制浅复制是通过学习c++了解到的,比如c++很好用的模板,php是不允许方法模板和类模板 一个简单的例子,如果不是很了解php 的取地址符&,可以去看下官方文档,php的& ...
- IO实时监控命令iostat详解
iostat用于输出CPU和磁盘I/O相关的统计信息 命令格式 iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] ...
