#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 字符串常用函数的更多相关文章

  1. Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数

    怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...

  2. python的基本用法(三)字符串常用函数

    字符串常用函数 # s='.abcd.'# new_s=s.strip('.')#默认去掉字符串两边的空格和换行符,想去掉什么括号中就写什么# print('s',s)# print('new_s', ...

  3. python字符串 常用函数 格式化字符串 字符串替换 制表符 换行符 删除空白 国际货币格式

    # 字符串常用函数# 转大写print('bmw'.upper()) # BMW# 转小写print('BMW'.lower()) # bmw# 首字母大写print('how aae you ?'. ...

  4. SQL Server中截取字符串常用函数

    SQL Server 中截取字符串常用的函数: .LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...

  5. C 字符/字符串常用函数

    string.h中常用函数 char * strchr(char * str ,char ch); 从字符串str中查找首次出现字符ch的位置,若存在返回查找后的地址,若不存在则返回NULL void ...

  6. golang字符串常用函数

    package utils import "fmt" import "strconv" import "strings" var str s ...

  7. python面试题(二)字符串常用函数

    今天在微信的公众号上看到了一遍python学习开发的文章,里面有一些python的面试题,碰巧最近python不知道学什么了,索性学一下这篇文章啊!!先写一下一些字符串的常用函数.(ps:本人太菜,若 ...

  8. Python 字符串常用函数

    操作字符串的常用函数 函数 描述(返回值) str.capitalize() 将字符串的第一个字符大写 str.title() 返回标题化的字符串,即每个单词的首字母都大写 str.upper() 全 ...

  9. php 字符串常用函数

    数组.字符串和数据库是我们函数里面最.最.最常用的三类函数. 当然PHP的字符串函数也有很多.我们最常使用的两个系列的字符串: 1.单字节字符串处理函数 2.多字节字符串处理函数 3.字符串编码转换函 ...

  10. Python—字符串常用函数

    Python-字符串常用字符串 字符串是一种表示文本的数据类型,使用单引号和双引号及三引号表示 访问字符串中的值字符串的每个字符都对应一个下标,下标编号是从0开始 转义字符字符串的格式化输出切片常用函 ...

随机推荐

  1. 2.1:你的第一个AngularJS App

    本章,带你体验一个简单的开发流程,将一个静态的使用模拟数据的应用,变成具有AngularJS特性的动态web应用.在6-8章,作者将展示如何创建一个更复杂,更真实的AngularJS应用. 1.准备项 ...

  2. 使用crontab不能正常执行的问题

    crontab -l:   列出当前用户的crontab列表crontab -e:   以vi打开crontab文件,可以进行编辑.如果需要加新的自启动项目,可以在此进行添加后再输入:wq 保存. & ...

  3. ecshop编辑器fckeditor换百度ueditor编辑器教程

    1.下载uediter编辑器,解压上传目录uediter到根目录/includes/下   2.修改admin/includes/lib_main.php         /**   * 生成编辑器  ...

  4. C++中的类型重定义

    发现重复定义是由于从两个不同的路径包含了同一个头文件而引起的,同事也建议从另外一个路径打开工程试试, 这才慢慢发现了原因.这个原因可能有些拗口,而事实上要出现这种错误也有些"曲折" ...

  5. Database

    1.Mysql 本地计算机登陆mysql,(DOC界面)mysql -h 127.0.0.1 -u root -p

  6. poj3342 Party at Hali-Bula

    树形dp题,状态转移方程应该很好推,但一定要细心. http://poj.org/problem?id=3342 #include <cstdio> #include <cstrin ...

  7. LTE切换与TAU问题

    假如有两个LTE基站A B(同频组网) AB TAC不同 且添加了双向邻区关系 现终端开机重选至A然后往B方向移动 是先切换呢?还是先进性TAU更新 这个没有影响,,TAU并非需要在IDLE状态下才能 ...

  8. view class source code with JAD plugin in Eclipse

    The default class viewer doesn't decompile the class file so you cannot open and check the source co ...

  9. Poj(1466),最大独立集,匈牙利算法

    题目链接:http://poj.org/problem?id=1466 Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total S ...

  10. SharePoint自动化系列——Add/Remove "Record" from items

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 目的:批量的将SharePoint items变成records或者将records变成普通的it ...