IOS 阶段学习第十天笔记(字符串操作)

IOS学习(C语言)知识点整理

一、字符串的操作

1)字符串的存储,字符数组,在堆里面申请内存空间。

实例代码:

#include <stdlib.h>
#include <string.h>
int main(){
    char str[100] = "hello world";
    char *p = "hello world";
    //*p =‘H‘;//常量字符串不可以修改,p指向只读的地址
    p = str;
    *p = ‘H‘;
   // printf("%s",str);
    p = (char*)malloc(100);
    //判空
    if(p==NULL)
        return 0;

    //清零
    memset(p,0,100);
    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 0;
}

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

实例代码:

 1 #include <ctype.h>
 2 int main()
 3 {
 4     printf("%d\n",isalnum(‘1‘));//1
 5     printf("%d\n",isalpha(‘1‘));//0
 6     printf("%d\n",isdigit(‘a‘));//0
 7     printf("%d\n",islower(‘A‘));//0
 8     printf("%d\n",isupper(‘a‘));//0
 9     printf("%d\n",isxdigit(‘F‘)); //1
10     printf("%c\n",tolower(‘A‘));//a
11     printf("%c\n",toupper(‘a‘));//A
12     printf("%d\n",digittoint(‘1‘));//1
13     printf("%d\n",ishexnumber(‘a‘));//1
14     printf("%d\n",isnumber(‘a‘));//0
15     return 0;
16 }

3)字符串拷贝 使用strcpy或strncpy 后者可以指定拷贝长度。

实例代码:

 1 int main()
 2 {
 3     char str[20] ="XXXXXXXXXXXXXX";
 4     char *p = "hello";
 5     strcpy(str,p);//从p的位置拷贝字符串,把p后面的‘\0‘也拷贝过来.如果接收的字符串空  间不够大,可能会越界 。
 6     printf("%s\n",str);//从str开始,打印到\0结束
 7     for(int i=0;i<10;i++){
 8         printf("str[%d]=%c=%d\n",i,str[i],str[i]);
 9     }
10     unsigned long len=strlen(str);
11     strncpy(str,p,len-1);//最后的参数:最大拷贝字符数.一般设置为目的字符串bufsize-1,预留结束符
12     str[len-1] = ‘\0‘;//数组的最后的一个元素置为结束符
13     printf("%s\n",str);//从str开始,打印到\0结束
14
15 }

4)字符串比较函数 strcmp, strncmp  后者可以限定比较字符串的长度,如果相等比较结果等于0,如果s1>s2 结果大于0;

如果s1<s2 结果小于0;比较结果等于字符串中首个不相等字符的ascii码的差值。

实例代码:

 1 int main()
 2 {
 3     char *p1 = "helloAworld";
 4     char *p2 = "helloB";
 5     int rst;
 6     rst = strcmp(p1, p2);
 7     printf("rst = %d\n",rst);//结果:-1
 8     rst = strncmp(p1, p2, 2);//2表示比较的最大长度
 9     printf("rst = %d\n",rst);//结果:0
10     return 0;
11 }

5)查找字符串函数

1、strchr 从左往右正向查找。

2、strrchr 从右往左逆向查找。

3、strstr 返回 s2字符串在s1字符串中第一次出现的位置,找不到对应的字串, 返回NULL。

实例代码:

 1 int main()
 2 {
 3     char *p = "hello china world";
 4     char *pRst;
 5     pRst = strchr(p,‘X‘);//找不到返回NULL
 6     printf("%s\n",pRst);
 7     printf("%s\n",strchr(p,‘l‘));//正向
 8     printf("%s\n",strrchr(p,‘l‘));//逆向
 9     pRst = strstr(p,"china");
10     printf("%s\n",pRst);
11     return 0;
12 }

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(预留结束符)

实例代码:

 1 int main()
 2 {
 3     char str[20] = "hello";
 4     strcat(str," world");//在原字符串的末尾,加上新的字符串
 5     printf("%s\n",str);
 6     int len = (int)strlen(str);
 7     strncat(str,"hello world",20-len-1);
 8     len = (int)strlen(str);
 9     printf("strlen=%d,%s\n",len,str);
10     return 0;
11 }

7)字符串分割函数 strtok 结构char *strtok(char *src, const char *demi)。

1、strtok 把src字符串中所有的分隔符变成‘\0‘

2、直接修改原字符串

3、只有第一次调用的时候需要传递字符串的首地址, 从第二次开始需要传递NULL

4、写一个函数实现截取字符串并提取被截断的任一部分字符

实现代码:

 1 void* splitstr(char *str,char *sp,int index){
 2     char *result = NULL;
 3     result = strtok( str, sp );
 4     int num=0;
 5     while( result != NULL ) {
 6         if(num==index)
 7             break;
 8         result = strtok( NULL, sp );
 9         num++;
10     }
11     return  result;
12 }
13
14 int main(){
15     char str[] = "我爱#中华#人民#共和国";
16     char sp[] = "#";
17     char *spstr=str;
18     char *spf=sp;
19     char *result = (char*)splitstr(spstr,spf,2);//结果:人民
20     printf("%s",result);
21     return 0;
22 }

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中的字符数

实例代码:

1 int main()
2 {
3     char *p1 = "hello world";
4     char *p2 = "girl";
5     printf("%s\n",strpbrk(p1,p2));//‘l‘在p2也有,‘l‘是2个字符串的第一个公共字符,返回在p1中的地址
6     char *p3 = "lehRwsrt";
7     printf("%lu\n",strspn(p1,p3));//p1中,前4个字符,在p3中也存在
8     return 0;
9 }

9)提取整数, 以数字开头提取到字母截止 ;实现函数有

1、atoi 用于提取 int类型数据

2、atof 用于提取 double,float等浮点型数据

3、atol 用于提取 long 等长整形数据

实例代码:

 1 int main(){
 2     int a;
 3     a=atoi("2adse");
 4     printf("a=%d\n",a);
 5
 6     double d;
 7     d=atof("122dsf3.34f4");
 8     printf("d=%.3f\n",d);
 9
10     long l;
11     l=atol("23454df3556s");
12     printf("l=%ld\n",l);
13     return 0;
14 }

10)反转字符串

实例代码:

 1 char *reverse(char *s){
 2     char ch;
 3     unsigned long len=strlen(s);
 4     for (int i=0; i<=len/2; i++) {
 5         ch=*(s+i);
 6         *(s+i)=*(s+len-1-i);
 7         *(s+len-1-i)=ch;
 8     }
 9     return  s;
10 }
11
12 char *strcat1(char *s,const char *ct){
13     char *p=s;
14     while (*p!=‘\0‘) {
15         p++;
16     }
17
18     while (*ct!=‘\0‘) {
19         *p=*ct;
20         p++;
21         ct++;
22     }
23     return  s;
24 }
25
26 int main(){
27     //反转字符串
28     char str[100]="asdfer";
29     printf("%s",reverse(str));
30     char *qstr="qianfeng";
31     strcat1(str, qstr);
32     printf("%s",str);
33     return 0;
34 }
时间: 2024-12-15 07:14:02

IOS 阶段学习第十天笔记(字符串操作)的相关文章

IOS 阶段学习第十天笔记(结构体)

IOS学习(C语言)知识点整理 一.数据结构 1)概念:数据结构是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算. 2)结构体必须有struct 关键字修饰. 实例代码: 1 struct Person{ 2 char name[20]; 3 int age; 4 float height; 5 }; 6 7 int main(){ 8 struct Person Tom={"Tom",22,180};//struct Person 是数据结构 9 //Tom 是变

IOS阶段学习第13天笔记(NSString与NSMutableString)

IOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableString:可以修改对象内容. 二.NSString 不可变字符串的操作 1)将字符串常量对象直接赋值给字符串引用 NSString *[email protected]"hello"; 字符串对象的输出格式:NSLog(@"str1=%@",str1). 2)initWi

IOS阶段学习第四天笔记(循环)

    IOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双分支 if表达式不成立 则执行else{ }里面的语句 3.字符串的输出系统会从数组地址一直打印到字符 ‘\0’为止,如果没有正确初始化,可能会打印出数组外的信息 4.如果分支结构里面只有一条执行语句可省略外面的大括号{} . 二.开关语句 1.语句结构 :switch (参数) case

IOS阶段学习第三天笔记(运算符)

                                         IOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运算符优先级 括号()> * ,/ ,%  >+,- 4)%表示取余.取模  a%b 表示a除以b取余数 5)整数相除保留两位小数处理方法如: printf(“%.2f”,(float)14/9); 6)自增自减运算符

IOS 阶段学习第22天笔记(JSON数据格式)

IOS学习(OC语言)知识点整理 一.JSON数据格式 1)概念:json是一种网络数据传输格式,有值/对象:{“A”:1,”B”:”2”…}词典:对象的序列:[,,,,,]数组两种数据类型 2)URLWithString 将字符串网址封装成NSURL对象 例如: 1 NSString *urlStr=@"http://10.0.8.8/sns/my/user_list.php?number=20 2 &page=";//get post 3 NSURL *url=[NSURL

IOS阶段学习第17天笔记(OC中文件的操作)

IOS学习(OC语言)知识点整理 一.单例模式 1)单例是一种编程思想,一个设计模式,与语言无关在采用了单例对象的应用程序中,需要单例类自行提供实例化单例对象, 不管实例化单例对象多少次,只有一个对象存在,这个对象是全局的,能够被整个应用程序共享,访问 2)使用单例模式时使用类提供的类方法获取单例对象,尽量不要用alloc init的方法获取单例对象 3)单例类提供类方法获取单例对象时类方法一般以sharedXX/standedXX/defaultXX开头 实例代码: #import "Plan

IOS 阶段学习第23天笔记(XML数据格式介绍)

IOS学习(OC语言)知识点整理 一.XML数据格式介绍 1)概念:xml是extensible markup language扩展的标记语言,一般用来表示.传输和存储数据 2)xml与json目前使用比较广泛的两种网络传输数据格式 两者分别占比: 1. json:市场上占90%,轻量级的表示数据 2.xml:占10%,表示数据比较复杂 3)XML三种数据解析方法: 1.DOM解析:将整个xml数据加载到内存中,构造一个对象,从根结点开始一级一级的解析提取数据.缺点:如果数据大, 比较占内存,解

IOS阶段学习第21天笔记(ARC内存管理-Copy-代理)

IOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引用__weak 4)ARC环境下:与内存相关的代码都不能使用了,如果要在ARC环境下使用MRC内存管理代码 如: [super    delloc]  选中项目找到 Build Phases 菜单下的  Compile Sources 项 选中要转换的.m文件, 双击写入此行代码:-fno-objc

IOS阶段学习第16天笔记(Category、NSSet、NSIndexSet的操作)

IOS学习(OC语言)知识点整理 一.NSSet.NSMutableSet集合的介绍 1)NSSet.NSMutableSet集合,元素是无序的,不能有重复的值. 2)用实例方法创建一个不可变集合对象 例如: //宏定义 #define TOBJ(n) [NSNumber numberWithInt:n] NSSet *set1=[[NSSet alloc]initWithObjects:TOBJ(2),TOBJ(3),TOBJ(3),TOBJ(1),TOBJ(5), nil]; 2)用类方法创