黑马程序员——c语言基础:字符串
来源:互联网 发布:tcl42寸网络电视 编辑:程序博客网 时间:2024/05/22 08:22
1.字符串的基本概念和使用
1.1.字符串的概念:字符串是位于双引号中的字符序列,在内存中一“\0”结束,所占字节比实际多一个
注意:
1)可以把一个字符常量赋值给一个字符变量,但不能把字符串常量赋值给字符变量。
2)C语言中没有字符串变量,可以用字符数组来存放字符串。
1.2.用字符数组保存字符串:
方法1:char str1[4] = {"abc"};
方法2:char str2[4] = "a,b,c";
1.3.字符串的输入输出:
使用的格式字符串为“%s”,表示输入、输出的是一个字符串。
3.1用%s输出字符串:printf("%s",ch1); // 输出原理:从给定的地址开始,输出字符直到遇到\0结束。
3.2用%s输入字符串:scanc("%s",ch1); // 从键盘上接收一个字符串,保存在以ch1为首地址的字符数组中。
注意:1)如果输入的字符串有空格,则空格之后的字符无法被接收保存。
2)输入的字符串长度要小于数组的长度。
1.4.字符串长度的计算方法
1)使用字符串函数:strllen(str1);
2)以'/0'作为判断条件,遇到‘\0'就结束,\0之前的就是字符串的长度。
实例:字符数组的初始化和输入输出。
#include <stdio.h>
int main(int argc,const char * argv[]) {
//定义并初始化一个字符数组
char ch[] ="Do you want join itheima?\n";
// 用%s输出字符串
printf("%s",ch);
//定义变量,接收字符串
char ch1[10];
//从键盘接收一个字符串
scanf("%s", ch1);
// 输出字符串
printf("%s", ch1);
return 0;
}
判断字符串中是否包含某个字符,如果包含,返回其首次出现的位置,否则返回-1。
#include <stdio.h>
// 定义函数,返回某字符在字符串中首次出现的位置,如果字符串中不包含该字符,则返回-1
int charPosition(char ch,char str[]){
int i = 0;
while (str[i] != ch) {
if (str[i] == '\0') {
return -1;
}
i ++;
}
return i;
}
int charPosition2(char key,char str[]){
// 先遍历字符串
for (int i =0; str[i] != '\0'; i ++) {
if (str[i] == key) { // 如果str[i]等于key
return i; // 返回i
}
}
return -1;// 如果字符串中不包含key,返回-1
}
int main(int argc,const char * argv[]) {
//定义并初始化一个字符串
char str[] ="I want join it heima!";
//判断字符串是否包含某个字符
printf("%d",charPosition2('I', str));
return 0;
}
3.字符串函数的使用:
puts() 输出一个字符串,并且自动换行,参数可以是字符数组名,也可以是字符元素的地址。
gets() 输入一个字符串,会给出一个不安全警告,可以接收空格
strcat()连接两个字符串:
strcat(A,B); //把字符串B连接到A的后面,但要保证A的长度足够保存下B,否则会越界。
strcpy字符串拷贝函数
strcpy(oldStr, newStr); //把newStr拷贝到oldStr中,newStr会覆盖掉oldStr中的内容,oldStr要足够大,否则会越界。
strcmp字符串比较函数
strcmp(str1, str2); //比较str1和str2的大小,比较规则:从左到右逐个比较两个字符串中的字符,当两字符串中同一下标的两个字符不同时,返回两字符的ASCII码的差。
strlen字符串的长度计算函数
strlen(str); //计算str的长度(不包含‘\0’)
注意:
使用puts和gets必须包含头文件stdio.h
使用strcat,strcpy,strcmp,strlen需要包含string.h的头文件
应用举例:
#include <stdio.h>
#include <string.h>
int main(int argc,const char * argv[]) {
// 定义两个字符串
char str1[100];
char str2[100];
// 输入一个字符串
printf("请输入第一个字符串:\n");
gets(str1);
// 输出一个字符串
printf("你输入的第一个字符串是:\n");
puts(str1);
//再输入一个字符串
printf("请输入第二个字符串:\n");
gets(str2);
//连接两个字符串并输出
printf("连接两个字符串:\n");
puts(strcat(str1, str2));
//将一个字符串拷贝到另一个字符串中并输出
printf("将第二个字符串拷贝都第一个字符串中:\n");
puts(strcpy(str1, str2));
// 比较两个字符串
printf("第一个字符串与第二个字符串相比较: ");
printf("%d\n",strcmp(str1, str2));
//计算字符串的长度
printf("第一个字符串的长度是:%lu\n",strlen(str1));
return 0;
}
4.字符串例题:使用gets()函数从键盘输入一个字符串,判断输入的有多少个单词,并将每个单词的首字母转换成大写。
#include <stdio.h>
// 定义函数,将字母转换成大写
char upper(char ch){
//判断传人的字符是不是小写字母
if (ch >= 'a' && ch <='z') {
//如果是小写字母,则转换成大写
ch = ch -32;
} //如果不是小写字母,则不作处理
return ch;
}
int main(int argc,const char * argv[]) {
//定义一个字符串数组
char str[100];
// 输入一个字符串
gets(str);
//定义变量,存储单词数
int count = 0;
//如果输入不为空,即第一个元素不为‘\0’
if (str[0] !='\0') {
count ++;// 则至少有1个单词
str[0] =upper(str[0]);// 如果str[0]是小写字母,则转换为大写
}
// for循环从首元素开始,遇到‘\0’结束
for (int i =0; str[i] != '\0'; i ++) {
if (str[i] == ' ' && str[i +1] != ' ' && str[i +1] != '\0') {// 如果str[i]是空格,且str[i + 1]不是空格和'\0'
count ++;// 则单词数+1
str[i +1] = upper(str[i +1]); // 将str[i + 1]转换成大写
}
}
// 输出单词数量
printf("输入了%d个单词\n", count);
//输出转换后的字符串
printf("将单词的首字母转换成大写后的字符串为:\n");
puts(str);
return 0;
}
- 黑马程序员——C语言基础--数组和字符串
- 黑马程序员——c语言基础:数组和字符串
- 黑马程序员——c语言基础:字符串
- 黑马程序员——ios基础---C语言:字符串、指针
- 黑马程序员——C语言基础---字符串
- 黑马程序员------C语言基础 字符串
- 黑马程序员-----------C语言基础-----------字符串
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础——数组和字符串
- 黑马程序员————C语言基础 第13篇 字符串知识总结
- 黑马程序员——C语言基础(五)数组与字符串
- 黑马程序员——C语言基础篇---宏定义、数组、字符串和函数
- 黑马程序员——IOS基础---C语言学习之复杂数据类型之字符串
- 黑马程序员——C语言基础---复杂数据类型(数组,字符串)
- 黑马程序员——C语言基础篇---基础语法
- 黑马程序员——C语言基础---基础语法
- 项目1:存储班长信息的学生类
- 第九周项目1-复数类中的运算符重载(续)
- 1076 排序
- 为什么要使用RTP
- asp.net学习之路之登录+access数据库操作
- 黑马程序员——c语言基础:字符串
- 关于2015阿里移动推荐算法大赛的总结(三)——机器学习
- 【Java并发编程】之十七:深入Java内存模型—内存操作规则总结
- HTML DOM clip 属性
- Android快速入门教程总结帖
- apk文件安装成功后,Android AVD桌面上不显示图标
- C语言中的字符串函数
- 混合编程---c++调用matlab生成的dll----findCircles的应用
- 【机房重构】——上下机之思考过程