iOS 阶段学习第十天笔记(字符串操作)
iOS学习(C语言)知识点整理
一、字符串的操作
1)字符串的存储,字符数组,在堆里面申请内存空间。
实例代码:
#include <stdlib.h>
#include <string.h>
int main(){
char str[] = "hello world";
char *p = "hello world";
//*p ='H';//常量字符串不可以修改,p指向只读的地址
p = str;
*p = 'H';
// printf("%s",str);
p = (char*)malloc();
//判空
if(p==NULL)
return ; //清零
memset(p,,);
printf("p=%p\n",p);
//字符串赋值
//memcpy(p, "helloworld", 10);//方法一:内存拷贝
sprintf(p,"%s","helloworld");//方法二:sprintf()输出赋值
//p = "helloworld";//错误,p指向常量区,把申请的内存都丢了
printf("p=%p\n",p);
printf("%s",p);
//释放
free(p);
return ;
}
2)字符操作函数, 形参为对应参数的ASCII码值,满足条件返回1,不满足返回0 ; 需要引用头文件#include <ctype.h>
1、int isalnum(int);// 判断是否是数字或者字母
2、int isalpha(int);//判断是否是英文字符
3、int isdigit(int);//判断是否是数字 0~9
4、int islower(int);//判断是否是小写字母
5、int isupper(int);//判断是否是大写字母
6、int isxdigit(int);//是否是16进制数字
7、int tolower(int);//转成小写
8、int toupper(int);//转成大写
9、int digittoint(int);//把十六进制数字字符转换成整型
10、int ishexnumber(int);//等价 isxdigit
11、int isnumber(int);//等价isdigit
实例代码:
#include <ctype.h>
int main()
{
printf("%d\n",isalnum(''));//
printf("%d\n",isalpha(''));//
printf("%d\n",isdigit('a'));//
printf("%d\n",islower('A'));//
printf("%d\n",isupper('a'));//
printf("%d\n",isxdigit('F')); //
printf("%c\n",tolower('A'));//a
printf("%c\n",toupper('a'));//A
printf("%d\n",digittoint(''));//
printf("%d\n",ishexnumber('a'));//
printf("%d\n",isnumber('a'));//
return ;
}
3)字符串拷贝 使用strcpy或strncpy 后者可以指定拷贝长度。
实例代码:
int main()
{
char str[] ="XXXXXXXXXXXXXX";
char *p = "hello";
strcpy(str,p);//从p的位置拷贝字符串,把p后面的'\0'也拷贝过来.如果接收的字符串空 间不够大,可能会越界 。
printf("%s\n",str);//从str开始,打印到\0结束
for(int i=;i<;i++){
printf("str[%d]=%c=%d\n",i,str[i],str[i]);
}
unsigned long len=strlen(str);
strncpy(str,p,len-);//最后的参数:最大拷贝字符数.一般设置为目的字符串bufsize-1,预留结束符
str[len-] = '\0';//数组的最后的一个元素置为结束符
printf("%s\n",str);//从str开始,打印到\0结束 }
4)字符串比较函数 strcmp, strncmp 后者可以限定比较字符串的长度,如果相等比较结果等于0,如果s1>s2 结果大于0;
如果s1<s2 结果小于0;比较结果等于字符串中首个不相等字符的ascii码的差值。
实例代码:
int main()
{
char *p1 = "helloAworld";
char *p2 = "helloB";
int rst;
rst = strcmp(p1, p2);
printf("rst = %d\n",rst);//结果:-1
rst = strncmp(p1, p2, );//2表示比较的最大长度
printf("rst = %d\n",rst);//结果:0
return ;
}
5)查找字符串函数
1、strchr 从左往右正向查找。
2、strrchr 从右往左逆向查找。
3、strstr 返回 s2字符串在s1字符串中第一次出现的位置,找不到对应的字串, 返回NULL。
实例代码:
int main()
{
char *p = "hello china world";
char *pRst;
pRst = strchr(p,'X');//找不到返回NULL
printf("%s\n",pRst);
printf("%s\n",strchr(p,'l'));//正向
printf("%s\n",strrchr(p,'l'));//逆向
pRst = strstr(p,"china");
printf("%s\n",pRst);
return ;
}
6)字符串拼接函数
1、strcat, 结构char *strcat(char *dst, const char *src) dst 指向的内存剩余的空间要足够容纳src字 符串,dst src 指向的内存不能重叠。
2、strncat,结构char *strncat(char *, const char *, size_t n) size_t n: 最大拼接字符个数//数组的长度-当前的有效个数-1(预留结束符)
实例代码:
int main()
{
char str[] = "hello";
strcat(str," world");//在原字符串的末尾,加上新的字符串
printf("%s\n",str);
int len = (int)strlen(str);
strncat(str,"hello world",-len-);
len = (int)strlen(str);
printf("strlen=%d,%s\n",len,str);
return ;
}
7)字符串分割函数 strtok 结构char *strtok(char *src, const char *demi)。
1、strtok 把src字符串中所有的分隔符变成'\0'
2、直接修改原字符串
3、只有第一次调用的时候需要传递字符串的首地址, 从第二次开始需要传递NULL
4、写一个函数实现截取字符串并提取被截断的任一部分字符
实现代码:
void* splitstr(char *str,char *sp,int index){
char *result = NULL;
result = strtok( str, sp );
int num=;
while( result != NULL ) {
if(num==index)
break;
result = strtok( NULL, sp );
num++;
}
return result;
}
int main(){
char str[] = "我爱#中华#人民#共和国";
char sp[] = "#";
char *spstr=str;
char *spf=sp;
char *result = (char*)splitstr(spstr,spf,);//结果:人民
printf("%s",result);
return ;
}
8)检索字符串
1、strpbrk 函数;结构为 char *strpbrk(const char *s1, const char *s2);依次检索s1中的字符,
当s2中也包含时,停止检索,并返回该字符位置.
2、strspn 函数;结构为 size_t strspn(const char *s1, const char *s2);//s1中s1开头连续的都在s2中的字符数
实例代码:
int main()
{
char *p1 = "hello world";
char *p2 = "girl";
printf("%s\n",strpbrk(p1,p2));//'l'在p2也有,'l'是2个字符串的第一个公共字符,返回在p1中的地址
char *p3 = "lehRwsrt";
printf("%lu\n",strspn(p1,p3));//p1中,前4个字符,在p3中也存在
return ;
}
9)提取整数, 以数字开头提取到字母截止 ;实现函数有
1、atoi 用于提取 int类型数据
2、atof 用于提取 double,float等浮点型数据
3、atol 用于提取 long 等长整形数据
实例代码:
int main(){
int a;
a=atoi("2adse");
printf("a=%d\n",a);
double d;
d=atof("122dsf3.34f4");
printf("d=%.3f\n",d);
long l;
l=atol("23454df3556s");
printf("l=%ld\n",l);
return ;
}
10)反转字符串
实例代码:
char *reverse(char *s){
char ch;
unsigned long len=strlen(s);
for (int i=; i<=len/; i++) {
ch=*(s+i);
*(s+i)=*(s+len--i);
*(s+len--i)=ch;
}
return s;
}
char *strcat1(char *s,const char *ct){
char *p=s;
while (*p!='\0') {
p++;
}
while (*ct!='\0') {
*p=*ct;
p++;
ct++;
}
return s;
}
int main(){
//反转字符串
char str[]="asdfer";
printf("%s",reverse(str));
char *qstr="kingkong";
strcat1(str, qstr);
printf("%s",str);
return ;
}
iOS 阶段学习第十天笔记(字符串操作)的更多相关文章
- iOS 阶段学习第十天笔记(结构体)
iOS学习(C语言)知识点整理 一.数据结构 1)概念:数据结构是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算. 2)结构体必须有struct 关键字修饰. 实例代码: stru ...
- iOS阶段学习第16天笔记(Category-NSSet-SEL-NSIndexSet 操作)
iOS学习(OC语言)知识点整理 一.NSSet.NSMutableSet集合的介绍 1)NSSet.NSMutableSet集合,元素是无序的,不能有重复的值. 2)用实例方法创建一个不可变集合对象 ...
- iOS阶段学习第15天笔记(NSDate操作)
iOS学习(OC语言)知识点整理 一.OC关于NSDate类的操作实例代码 //默认直接显示对象,显示的是格林威治时间 //获取当前日期时间的实例方法 NSDate *date1=[[NSDate a ...
- iOS阶段学习第14天笔记(NSString与NSMutableString)
iOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableStr ...
- iOS阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...
- iOS阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS 阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...
- iOS 阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
随机推荐
- 线程池ThreadPool知识碎片和使用经验速记
ThreadPool(线程池)大概的工作原理是,初始时线程池中创建了一些线程,当应用程序需要使用线程池中的线程进行工作,线程池将会分配一个线程,之后到来的请求,线程池都会尽量使用池中已有的这个线程进行 ...
- IOS 其它语言比较-Objc与JAVA的比较
1. Objc是一门编译型语言,JAVA是解析型语言 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序.然后,可直接运行这个程序. 编译型语言,执行速度快.效率高:依赖编译器.跨平台性差些. ...
- 解决方法of未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
在开发的一个报表转换功能涉及到Excel97-2003(.xls)文件的导入.使用oledb来读取excel数据.代码为: public static DataSet LoadDataFromExce ...
- cordova编译报错:Execution failed for task ':processDebugResources'
cordova编译报错:Execution failed for task ':processDebugResources' 引发这个错误的最扩祸首就是一个中文命名的文件,不知道什么时候加入的,我写了 ...
- G2 DT时代的图形语法 正式发布
G2有一个高大上的名字叫做:The Grammar Of Graphics——图形语法.它是一个强大的语义化图表生成工具,它提供了一整套图形语法,可以让用户通过简单的语法搭建出无数种图表,并且集成了大 ...
- Mybatis中SqlMapper配置的扩展与应用(1)
奋斗了好几个晚上调试程序,写了好几篇博客,终于建立起了Mybatis配置的扩展机制.虽然扩展机制是重要的,然而如果没有真正实用的扩展功能,那也至少是不那么鼓舞人心的,这篇博客就来举几个扩展的例子. 这 ...
- 《C与指针》第八章练习
本章问题 1.根据下面给出的声明和数据,对每个表达式进行求值并写出它的值.在对每个表达式进行求值时使用原先给出的值(也就是说,某个表达式的结果不影响后面的表达式).假定ints数组在内存中的起始位置是 ...
- Python数据类型之“序列概述与基本序列类型(Basic Sequences)”
序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...
- Design2:数据层次结构建模之二
MSSql提供了一个新的数据类型 HierarchyID,用来处理层次结构的数据,这个数据类型是系统内置的CLR数据类型,不需要专门激活 SQL/CLR 功能即可使用.当需要表示各值之间的嵌套关系,并 ...
- 动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)
× 目录 [1]漂浮的白云 [2]旋转的星球 [3]正方体合成 前面的话 前面介绍过动画animation的详细用法,本文主要介绍动画animation的三个效果 漂浮的白云 [效果演示] [简要介绍 ...