首页 > 其他分享 >字符串的相关案例和string库函数的使用

字符串的相关案例和string库函数的使用

时间:2024-07-25 11:27:26浏览次数:15  
标签:string int char str printf 字符串 include 库函数

字符串的存储特性:在存储过程中字符串都会在末尾自动添加一个结尾标志符\0

                                 来表示字符串结束

字符串的定义方式有两种:

方式一:

利用字符数组 + 双引号的方式定义字符串

例如: char str[4] = abc;

注意: 这里的数组长度要么不写,要么要在字符串的长度上加1

       因为字符串在存储中会有一个结尾标识符\0所以要加1

方式二:

利用指针 +双引号的方式定义字符串

例如: char* str = abc;

注意: 这种定义方式会将所存储的变量放入只读常量区;

只读常量区特点:1:内容不可以修改

                             2:里面的内容可以复用

例如:再创建一个 char* str1 = abc;   

只读常量区会优先判断该区内是否有相同的内容已经存在,因为和str一样都是存入只读常量区且内容一样,所以str1的地址和str的地址同一个并不会生成一个新的地址

案例1:

键盘录入一个字符串,并遍历出来
 

#include<stdio.h>


int main() {

	char str[100];
	printf("请输入一个字符串:");
	scanf("%s", str);
	printf("输入的字符串为:%s\n",str);

	//遍历字符串
	//创建一个字符指针
	char* p = str;
	//再根据字符串的性质结尾标志符为\0所以使用while循环
	
	while (1) {
		char c = *p;
		if (c == '\0') {
			break;
		}
		printf("%c\n", c);
		p++;
	}
}

案例2:

定义一个数组存储5个学生的名字并进行遍历

#include<stdio.h>



int main() {
	//方法一
	//即要将多个字符数组存入一个数组中
	//所以要创建一个二维数组

	char str[5][100] = {
		"zhangsan",
		"wangwu",
		"xaioming",
		"lihua",
		"wangqiang"
	};
	//通过循环将其遍历
	
	for (int i = 0; i < 5; i++) {
		//char* p = str[i];
		printf("%s\n", str[i]);
	}
}

#include<stdio.h>

  //方法二
	int main() {
		//定义一个数组指针存放5个名字字符串的指针
		char* p[5] = {

			"zhangsan",
			 "wangwu",
			 "xaioming",
			  "lihua",
			 "wangqiang"
		};
		for (int i = 0; i < 5; i++) {
			char* p1 = p[i];
				printf("%s\n", p[i]);
			}
	}

string的相关函数的使用:

strlen:获取字符串长度

strcat:拼接两个字符串

strcpy:复制字符串

strcmp:比较两个字符串

strlwr:将字符串变成小写

strupr:将字符串变成大写

注意:在一些编译器中 strlwr 和 strupr  两个函数可能被淘汰了,

      如要使用其对应的功能可以使用  _strlwr  和  _strupr

案例1:

用户登录判断

#include<stdio.h>
#include<string.h>

int main() {

	//先确定用户的账号和密码
	char* passwd = "zhangsan";
	char* mima = "123456";

	//键盘输入账号和密码
	char passwd1[100];
	printf("请输入账号:\n");
	scanf("%s", passwd1);
	
	char mima1[100];
	printf("请输入密码:\n");
	scanf("%s", mima1);
	
	//判断输入的信息是否和设置的信息一致
	if (!strcmp(passwd1, passwd) && !strcmp(mima1, mima)) {
		//若两个数相同strcmp则返回0
		printf("登陆成功!\n");
	}

	else {
		printf("登陆失败!\n");
	}
}

案例2:

 统计键盘输入的字符串中有多少个大写,小写,和数字

#include<stdio.h>
#include<string.h>

int main() {

	printf("请输入一个字符串\n");
	char str[100];
	scanf("%s", str);

	int num1 = 0; //统计大写个数
	int num2 = 0; //统计小写个数
	int num3 = 0; //统计数字个数

	for (int i = 0; i < strlen(str); i++) {
		
		if (str[i] >= 'A' && str[i] <= 'Z') {
			num1++;
		}
		else if (str[i] >= 'a' && str[i] <= 'z') {
			num2++;
		}
		else {
			num3++;
		}
	}
	printf("大写有%d个\n", num1);
	printf("小写有%d个\n", num2);
	printf("数字有%d个\n", num3);
}

标签:string,int,char,str,printf,字符串,include,库函数
From: https://blog.csdn.net/2401_83720143/article/details/140672666

相关文章

  • C++自学笔记16(字符串与字符串字面量)
    当我们想在电脑上以文本方式表示东西时,一个单词、一个句子、一大段文章都叫做字符串。字符串就是为了我们去处理文字文本的方法。字符串实际上就是字符组成的数组或指针(数组就是指针的一种)。(有人会问数组不是储存数字么?怎么储存字符?因为ASCLL码表将所有字母、数字、符号翻译......
  • binascii.Error:无效的 base64 编码字符串:数据字符数 (41) 不能多于 1 4 的倍数
    我正在尝试使用py-vapid、pywebpush和django-push-notifications通过Webpush发送通知。当我尝试从django管理网站发送测试通知时,我在控制台中收到此回溯日志:|InternalServerError:/djangoadmin/push_notifications/webpushdevice/......
  • Python XML 解析:字符串中的“<”被阻塞
    我有一个使用ET.XMLParser来解析CppCheckXML报告文件的Python模块。当尝试解析字符串中包含“<”的XML元素中的属性之一时,它会令人窒息,它会将其解释为格式错误的XML,例如:<errormsg="Includefile<iostream>notfound.">(注意字符和“iostream”之间的空格必须放......
  • 刷题了:344.反转字符串|541. 反转字符串II|卡码网:54.替换数字
    344.反转字符串题目链接:https://leetcode.cn/problems/reverse-string/description/文章讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html视频讲解:https://www.bilibili.com/video/BV1fV4y17748/?spm_id_from=333.788&vd_sou......
  • 【C#】-byte[]数组和string的互相转化 (四种方法)
    第一种stringstr=System.Text.Encoding.UTF8.GetString(bytes);byte[]decBytes=System.Text.Encoding.UTF8.GetBytes(str);同样的,System.Text.Encoding.Default,System.Text.Encoding.ASCII也是可以的。还可以使用System.Text.Encoding.UTF8.GetString(bytes).TrimEnd('\0......
  • STM32中断方式发送字符串的两种方法(判断TC和TXE)
    以前一直是用查询方式发送字符串的。今天研究了下手册,看到两个标志位TC和TXE,两种判断方式均可用。先说TC。即TransmissionComplete。发送一个字节后才进入中断,这里称为“发送后中断”。和原来8051的TI方式一样,都是发送后才进中断,需要在发送函数中先发送一个字节触发中断。发......
  • Java基础——String/StringBuilder/StringBuffer区别
    四个方面:不可变性、线程安全、性能、使用场景String:不可变,线程安全,适用于多线程编程。注意:由于String内部字符数组由final修饰,对其进行改变时会创建新的String对象,旧的会被JVM回收,容易触发gc(垃圾回收),这种行为可能会导致频繁的内存分配和垃圾回收,从而引起系统的内存抖动(memor......
  • 如何构建超大字符串
    1、使用StringBuilder或StringBuffer:StringBuilder和StringBuffer是Java中用于构建字符串的可变类。它们允许你在一个字符序列上追加和插入字符,而不需要创建新的对象。StringBuilder是线程不安全的,但在单线程环境下性能更好;而StringBuffer是线程安全的,但性能稍差。示例:St......
  • 构建超大字符串的示例
    publicclassLargeStringBuilderExample{publicstaticvoidmain(String[]args){//预估的字符串大小(仅作为示例,实际情况可能更大)intestimatedSize=10_000_000;//假设为1000万个字符//创建一个StringBuilder对象,并预估容量......
  • Java中string对象是如何实现的?string对象的优化过程
    1.基本实现Java中的String类是一个final类,这意味着它不能被继承。它内部使用一个字符数组(char[])来存储实际的字符序列。这个字符数组是私有的,并且不能被外部直接访问或修改(除了通过String类提供的公共方法)。String类还包含一些字段来跟踪字符串的长度(value.length)和哈希......