C语言学习笔记 之字符串
2015-10-02 12:20
369 查看
//---------------------字符串
字符串是位于双引号中的字符序列 printf(".....")
在内存中以“\0”结束,所占字节比实际多一个
1.可以把一个字符常量赋给一个字符变量,但不能把字符串常量赋给字符变量
2.C语言中没有字符串变量,
可以用字符数组来存放字符串
字符数组
格式
char 数组名[常量表达式]
char 数组名[常量表达式1][常量表达式2]
注意:定义字符数组时,应确保数组长度比字符串长度至少多1
//---------------------字符串初始化和引用
//定义的同时进行初始化
1)char c[10]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; 定义的同时进行初始化
2)char c4[10] = {"adc"} //定义了一个字符串数组c4 长度是10,初始化4个字符
3)char c5[5]="ab";
char c6[]="afdsafas”;//在写二维数组时要注意第二个角标不能省
//先定义再初始化
char c7[3];
c7[0] = 'a';
c7[1] = 'b';
c7[2] = 'c';
注意:未被使用的元素均被自动初始化为0(ASCII)
char ch[] = {'a','b','c'};
char ch[] = {'1','2','3','4','\0'};
char ch2[]= "abc"}; ----> "abc"
sizeof(ch) ----> 总字节数
sizeof(ch) / sizeof(char) ----> len
//------------------字符数组的引用
以字符串的形式输入和输出
使用的格式字符串为“%s”,表示输入、输出的是一个字符串。
%s 从给定的地址开始,输出字符直到遇到\0结束
注意在本例的printf函数中使用的%s,输出表列中给出 数组名 则可。
不能写为:printf("% s",c[]);
对一个字符数组,如果不作初始化赋值,则必须说明数组长度。
当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束
注意点:输入的长度要小于数组定义的长度。
//-----------------------字符串结束符
1)字符数组初始化时没有使用 '\0'
先定义的变量存放在内存高地址,后面定义变量放在内存低地址
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。
char ch[] = {'a','b','c','\0'};
char ch2[]= {"abc"};
关于字符串长度,如果在定义的没有规定字符串数组长度,则看元素个数,若规定了,则数组长度则是字符串长度.
//----------------------字符串长度计算方法
以“\0”为字符串结束条件进行统计
1)不知道数组长度的时候,计算字符串的长度
2)已知数组长度,但是不知道数组中实际存放了多少个字符
while实现strlen();
while(ch[i-1] != '\0')
abc\0cde
sizeof计算字符串长度-->char ch[] = "abab/0bbc"以内的所有字符长度 9
注意初始化定义的字符串数组的长度 char[10] = "abc" 10
strlen计算字符串长度--> \0前的所有字符长度
char[10] = "abc" 3
不包含 \0
//---------------------字符数组和普通数组区别
实际上,字符数组和普通数组一样,没有本质区别。 int a[10],char ch[10]
1)字符数组的每个元素都是char类型,整型数组的每个元素都是int类型。
2)scanf() 和 printf() 函数有一种格式化字符串 %s 可以用来整体输入输出字符数组,但是没 有特定的格式支持 int 数组整体数组输出。
3)字符数组 ,初始化 char str[]="aab";
整形数组,初始化不能去掉大括号
数组名永远是一个指针,指向第一个元素的地址,即数组首地址。
//-------------------------字符串函数
#include <string.h>
1、字符串输出函数 puts 格式: puts(字符数组名 或者 元素地址) 功能:把字符数组中的字符串输出到显示器。
会自动换行,但是不可以格式化输出
2、字符串输入函数 gets 格式: gets (字符数组名) 功能:从标准输入设备键盘上输入一个字符串。
不以空格为字,而以回车作为输入结束,但是依旧不是很安全
3、字符串连接函数 strcat 格式: strcat(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志 “\0”。本函数返回值是字符数组1的首地址。
要注意的是,字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。
//---------------------------------------------------------
4、字符串拷贝函数strcpy
格式: strcpy(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。
要求字符数组1应有足够的长度
5、字符串比较函数strcmp
格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
字符串1=字符串2,返回值=0; 字符串1>字符串2,返回值>0; 字符串1<字符串2,返回值<0。
本函数也可用于比较两个字符串常量,或比较数组和字符串常量。
6、测字符串长度函数strlen 格式: strlen(字符数组名)
功能:测字符串的实际长度(不含字符串结束标志'\0')并作为函数返回值。
转义字符\ 后面默认转义八进制数,
\\ --> \
\t --> 空格
\141 --> a
char str[] = "abc\0def"
sizeof(str) --> 8
strlen(str) --> 3
//-------------------------------单词首字母大写&统计单词个数
1、用什么函数接收字符串的输入?为什么?
2、根据什么条件判断单词是否要大写?
1、gets函数,因为gets函数可以接收空格。
2、根据空格后面是否是字母,来设置大写。
关键点:
gets(str);
'\0' 字符串结束的标志 在最后
for (int i=0; str[i]!='\0'; i++) {
//判断
if (str[i]==' ') {
//把是否是单词标记改一下
isWord = 0; //这是一个标记,words=0表示是一个单词
}else if(isWord == 0){
// 当前循环 字符是空格 下次循环一定是一个单词
count++;
str[i] = str[i]-32; //减去32就大些了
isWord = 1; // 让单词标志变为不是单词
}
}
;
在进行大小写的时候除了上面的方式以外,还可以让它和空格想与这样的也可以达到相应的效果。
str[i] = str[i] ^’ ’;
字符串是位于双引号中的字符序列 printf(".....")
在内存中以“\0”结束,所占字节比实际多一个
1.可以把一个字符常量赋给一个字符变量,但不能把字符串常量赋给字符变量
2.C语言中没有字符串变量,
可以用字符数组来存放字符串
字符数组
格式
char 数组名[常量表达式]
char 数组名[常量表达式1][常量表达式2]
注意:定义字符数组时,应确保数组长度比字符串长度至少多1
//---------------------字符串初始化和引用
//定义的同时进行初始化
1)char c[10]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; 定义的同时进行初始化
2)char c4[10] = {"adc"} //定义了一个字符串数组c4 长度是10,初始化4个字符
3)char c5[5]="ab";
char c6[]="afdsafas”;//在写二维数组时要注意第二个角标不能省
//先定义再初始化
char c7[3];
c7[0] = 'a';
c7[1] = 'b';
c7[2] = 'c';
注意:未被使用的元素均被自动初始化为0(ASCII)
char ch[] = {'a','b','c'};
char ch[] = {'1','2','3','4','\0'};
char ch2[]= "abc"}; ----> "abc"
sizeof(ch) ----> 总字节数
sizeof(ch) / sizeof(char) ----> len
//------------------字符数组的引用
以字符串的形式输入和输出
使用的格式字符串为“%s”,表示输入、输出的是一个字符串。
%s 从给定的地址开始,输出字符直到遇到\0结束
注意在本例的printf函数中使用的%s,输出表列中给出 数组名 则可。
不能写为:printf("% s",c[]);
对一个字符数组,如果不作初始化赋值,则必须说明数组长度。
当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束
注意点:输入的长度要小于数组定义的长度。
//-----------------------字符串结束符
1)字符数组初始化时没有使用 '\0'
先定义的变量存放在内存高地址,后面定义变量放在内存低地址
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。
char ch[] = {'a','b','c','\0'};
char ch2[]= {"abc"};
关于字符串长度,如果在定义的没有规定字符串数组长度,则看元素个数,若规定了,则数组长度则是字符串长度.
//----------------------字符串长度计算方法
以“\0”为字符串结束条件进行统计
1)不知道数组长度的时候,计算字符串的长度
2)已知数组长度,但是不知道数组中实际存放了多少个字符
while实现strlen();
while(ch[i-1] != '\0')
abc\0cde
sizeof计算字符串长度-->char ch[] = "abab/0bbc"以内的所有字符长度 9
注意初始化定义的字符串数组的长度 char[10] = "abc" 10
strlen计算字符串长度--> \0前的所有字符长度
char[10] = "abc" 3
不包含 \0
//---------------------字符数组和普通数组区别
实际上,字符数组和普通数组一样,没有本质区别。 int a[10],char ch[10]
1)字符数组的每个元素都是char类型,整型数组的每个元素都是int类型。
2)scanf() 和 printf() 函数有一种格式化字符串 %s 可以用来整体输入输出字符数组,但是没 有特定的格式支持 int 数组整体数组输出。
3)字符数组 ,初始化 char str[]="aab";
整形数组,初始化不能去掉大括号
数组名永远是一个指针,指向第一个元素的地址,即数组首地址。
//-------------------------字符串函数
#include <string.h>
1、字符串输出函数 puts 格式: puts(字符数组名 或者 元素地址) 功能:把字符数组中的字符串输出到显示器。
会自动换行,但是不可以格式化输出
2、字符串输入函数 gets 格式: gets (字符数组名) 功能:从标准输入设备键盘上输入一个字符串。
不以空格为字,而以回车作为输入结束,但是依旧不是很安全
3、字符串连接函数 strcat 格式: strcat(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志 “\0”。本函数返回值是字符数组1的首地址。
要注意的是,字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。
//---------------------------------------------------------
4、字符串拷贝函数strcpy
格式: strcpy(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。
要求字符数组1应有足够的长度
5、字符串比较函数strcmp
格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
字符串1=字符串2,返回值=0; 字符串1>字符串2,返回值>0; 字符串1<字符串2,返回值<0。
本函数也可用于比较两个字符串常量,或比较数组和字符串常量。
6、测字符串长度函数strlen 格式: strlen(字符数组名)
功能:测字符串的实际长度(不含字符串结束标志'\0')并作为函数返回值。
转义字符\ 后面默认转义八进制数,
\\ --> \
\t --> 空格
\141 --> a
char str[] = "abc\0def"
sizeof(str) --> 8
strlen(str) --> 3
//-------------------------------单词首字母大写&统计单词个数
1、用什么函数接收字符串的输入?为什么?
2、根据什么条件判断单词是否要大写?
1、gets函数,因为gets函数可以接收空格。
2、根据空格后面是否是字母,来设置大写。
关键点:
gets(str);
'\0' 字符串结束的标志 在最后
for (int i=0; str[i]!='\0'; i++) {
//判断
if (str[i]==' ') {
//把是否是单词标记改一下
isWord = 0; //这是一个标记,words=0表示是一个单词
}else if(isWord == 0){
// 当前循环 字符是空格 下次循环一定是一个单词
count++;
str[i] = str[i]-32; //减去32就大些了
isWord = 1; // 让单词标志变为不是单词
}
}
;
在进行大小写的时候除了上面的方式以外,还可以让它和空格想与这样的也可以达到相应的效果。
str[i] = str[i] ^’ ’;
相关文章推荐
- C++容器(五):set类型
- C++容器(五):set类型
- 文章标题
- 一起talk C栗子吧(第五十回:C语言实例--最小生成树二)
- 【一套C语言控制台的输出框代码】
- C++源代码免杀之函数的动态调用
- 复习C++
- C/C++ | sizeof
- c++ primer 学习之路 二 —— 实验楼作业笔记(1-3)
- 项目26.1 成绩等级
- C/C++ 数组负数下标 - 反向寻址
- #LeetCode# #C++# Binary Tree Postorder Traversal
- C++关于引用的说明
- 自己用C语言写PIC16单片机的serial bootloader
- c++中的 堆和栈
- C++ 对象模型具体评论(特别easy理解力)
- 编程语言学习:C++学习日记0 热身
- Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)
- 程序设计基石与实践之C语言内存地址基础
- C语言循环数组做FIFO队列