c 字符串常用函数
#include <iostream>
#include <stdio.h>
#include <vector>
#include "string.h"
using namespace std; int main()
{
//strlen:一直找到\0
char name[]="hi,linson.";
cout<<strlen(name)<<endl; char name2[]={'h','\0'};
cout<<strlen(name2)<<endl;// //strcat:从目的\0开始替换.一直到原串的\0
//发现如果目的串长度不够,居然使用后面的空间.看来必须慎用.
//src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
char name3[]="start";
// cout<<&name2<<endl;
// strcat(name2,name3);
// cout<<name2<<&name2<<endl;
//
// cout<<name<<name2<<name3<<endl; //strncat
//比较安全,可以指定长度.用目的串申请的长度-已经占用的长度,再-1(如果原来最后一位是\0,并且需要保留)
strncat(name2,name3,-strlen(name2)-); cout<<name<<":"<<name2<<endl; //strcom ,后面第一个个不同的字节的ascii减前面的ascii.这个编译器只返回1,0,-1
cout<<strcmp(name,name2)<<endl; //strncom,指定比较长度...为什么这里却返回ascii减前面的ascii?
cout<<strncmp(name,name2,)<<endl; //str 从源开始一直到\0,全部逐个赋值.太危险.
char des[]={'h','i','a','c'};//未定义字节用\0初始化了
char source[]={'h','i','\0'};
strcpy(des,source);
cout<<des<<":"<<source<<endl; //strncpy 指定数量复制.或者碰到\0
char des2[]={'h','i','a','c'};
char source2[]={'h','i','b'};
strncpy(des2,source2,);
cout<<des2<<":"<<source2<<endl;
return ;
}
c++:
string.find():完全匹配字符串。
string.find_first_of() .非完全匹配,
strncpy指定数量复制.或者碰到\0
而memcpy是直接看数量.\0也会copy.
用string 的时候 如果要从char* 复制一定数据,而且里面不都是字符,也有int 类型等,所以需要\0,必须 string(char* ,n).一定要制定长度.切记.
读出来根据string 的size 读.直接cout 是不行的.
#include <stdio.h>
#include <string>
#include <iostream>
#include <memory>
#include <memory.h> using namespace std;
int main(int argc, char **argv)
{
char abc[]={'a','\0','a','a','a','a','a'};
string a=string(abc,); string b=string(abc); for(int i=;i<a.size();++i)
{
cout<<a.size()<<":"<<a[i]<<endl;
}
cout<<"***************"<<endl;
for(int i=;i<b.size();++i)
{
cout<<b.size()<<":"<<b[i]<<endl;
}
//so ,string 构造函数不同,理解会有不同。如果想要中途接受\0的符号,必须制定长度。 string str1=a;
cout<<"***************"<<endl;
for(int i=;i<str1.size();++i)
{
cout<<str1.size()<<":"<<str1[i]<<endl;
}
//so.在这个编译其中。copy 实现或者是swap,或者根据长度来copy. string str2="a\0bccc";
cout<<"***************"<<endl;
for(int i=;i<str2.size();++i)
{
cout<<str2.size()<<":"<<str2[i]<<endl;
}
//so,和之前的构造函数一样,没有长度就不会包括\0,(是首先右边的构造函数再有左边的copy构造函数)
//右边的构造函数,是string(char*) string str3=string("a\0bccc",);
cout<<"***************"<<endl;
for(int i=;i<str3.size();++i)
{
cout<<str3.size()<<":"<<str3[i]<<endl;
} //yes.有长度是会copy \0的。所以最重要的一点就是如果想要完全从char*拿到数据。必须构造的时候指定长度。 string strok1=string("a\0bccc",);
string strok2=string("\0gg",); string strok3=strok1+strok2; cout<<"***************"<<endl;
for(int i=;i<strok3.size();++i)
{
cout<<strok3.size()<<":"<<strok3[i]<<endl;
} //看起来和\0,配合的还好。 string strerr1="abc\0efg";
string strerr2="\0cc"; string strerr3=strerr1+strerr2; cout<<"***************"<<endl;
for(int i=;i<strerr3.size();++i)
{
cout<<strerr3.size()<<":"<<strerr3[i]<<endl;
}
//这里出错还是一样的。右边构造没有制定长度。 string strok10=string("abc\0efg",);
string strok11=string("\0cc",); string strok12=strok10+strok11; cout<<"***************"<<endl;
for(int i=;i<strok12.size();++i)
{
cout<<strok12.size()<<":"<<strok12[i]<<endl;
} //制定了还是ok. char* mychar=new char[strok12.size()];
for(int i=;i<strok12.size();++i)
{
mychar[i]=strok12[i];
} cout<<strlen(mychar)<<":"<<strok12.size()<<endl;
//strlen是针对\0的。又是一个坑。 //所以,
//1)只要最初从char*中制定了长度构造。那么string 之间的=和+.都和\0无关。都会正确运行。
//2)而从string 到char* .必须多使用一个变量来保存长度。千万不能之拿到指针就结束了。
//2)唯一要注意的就是string strerr1="abc\0efg";这种情况,是属于没有指定长度的构造函数。是现有右边的无长度构造,后有右边的引用构造。 return ;
}
c 字符串常用函数的更多相关文章
- Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数
怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...
- python的基本用法(三)字符串常用函数
字符串常用函数 # s='.abcd.'# new_s=s.strip('.')#默认去掉字符串两边的空格和换行符,想去掉什么括号中就写什么# print('s',s)# print('new_s', ...
- python字符串 常用函数 格式化字符串 字符串替换 制表符 换行符 删除空白 国际货币格式
# 字符串常用函数# 转大写print('bmw'.upper()) # BMW# 转小写print('BMW'.lower()) # bmw# 首字母大写print('how aae you ?'. ...
- SQL Server中截取字符串常用函数
SQL Server 中截取字符串常用的函数: .LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...
- C 字符/字符串常用函数
string.h中常用函数 char * strchr(char * str ,char ch); 从字符串str中查找首次出现字符ch的位置,若存在返回查找后的地址,若不存在则返回NULL void ...
- golang字符串常用函数
package utils import "fmt" import "strconv" import "strings" var str s ...
- python面试题(二)字符串常用函数
今天在微信的公众号上看到了一遍python学习开发的文章,里面有一些python的面试题,碰巧最近python不知道学什么了,索性学一下这篇文章啊!!先写一下一些字符串的常用函数.(ps:本人太菜,若 ...
- Python 字符串常用函数
操作字符串的常用函数 函数 描述(返回值) str.capitalize() 将字符串的第一个字符大写 str.title() 返回标题化的字符串,即每个单词的首字母都大写 str.upper() 全 ...
- php 字符串常用函数
数组.字符串和数据库是我们函数里面最.最.最常用的三类函数. 当然PHP的字符串函数也有很多.我们最常使用的两个系列的字符串: 1.单字节字符串处理函数 2.多字节字符串处理函数 3.字符串编码转换函 ...
- Python—字符串常用函数
Python-字符串常用字符串 字符串是一种表示文本的数据类型,使用单引号和双引号及三引号表示 访问字符串中的值字符串的每个字符都对应一个下标,下标编号是从0开始 转义字符字符串的格式化输出切片常用函 ...
随机推荐
- 探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
前言相信这样一个问题,大家都不会陌生,“有什么的方法可以使Android的程序APK不用安装,而能够直接启动”.发现最后的结局都是不能实现这个美好的愿望,而腾讯Android手机游戏平台却又能实现这个 ...
- JavaEE基础(二十七)/反射、JDK新特性
1.反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入 ...
- Function对象属性和方法
/* var pattern = /^[\w]+\.(zip|rar|gz)$/; //|选择符必须用分组符号包含起来 var str = '123.7z'; alert(pattern.test(s ...
- APP运营推广那点事【干货】
你的手机里面有多少应用?什么样的手机应用吸引你?下载之后经常用还是让他shi在那里?又或者刚点进去就卸载? 一款成功的应用,开发APP只是第一步,比前者更重要的是“养”APP,APP就像是一个需要不断 ...
- maven 手动安装jar到仓库的命令
mvn install:install-file -DgroupId=com.sun -DartifactId=tools -Dversion=1.6.0 -Dpackaging=jar -Dfile ...
- JAVA基础知识之JVM-——通过反射查看类信息
Class实例 当类被加载之后,JVM中就会生成一个Class实例,通过这个实例就可以访问JVM中的这个类.有三种方式可以获取Class对象 使用Class的静态方法forName(完整包名) 调用类 ...
- CSUFT 1005 Coffin Tiles
1005: Coffin Tiles Time Limit: 1 Sec Memory Limit: 128 MB Submit: 2 Solved: 2 Description ...
- C#代码开发规范
Wrod下载 C#代码开发规范 文件状态: [√] 草稿 [ ] 正式 [ ] 修改 文件标识: 当前版本: 1.1 作 者: Empty 联系电话: 最后更新: ...
- 2016年11月12日 星期六 --出埃及记 Exodus 20:3
2016年11月12日 星期六 --出埃及记 Exodus 20:3 "You shall have no other gods before me.除了我以外,你不可有别的 神.
- IOSFramework打包。
http://www.cocoachina.com/ios/20150127/11022.html