首页 > 其他分享 >字符串

字符串

时间:2024-10-27 16:02:17浏览次数:2  
标签:字符 函数 int num 数组 字符串

练习:编写函数把一个数组里所有存储区的内容前后颠倒,假设数组里原有内容是1 2 3 4 5,颠倒后的内容是54321

#if 1
/*
 *数组内容颠倒
 *
 * */
#include<stdio.h>
int *func (int *p_num,int size){
	int *p_start = p_num,*p_end = p_num + size - 1;
	int tmp = 0;
	while (p_start < p_end){
		tmp = *p_start;
		*p_start = *p_end;
		*p_end = tmp;
		p_start++;
		p_end--;
	}
	return p_num;
}
int main (){
	int arr[] = {1,2,3,4,5};
	int *p_num = func(arr,5);
	int num = 0;
	for (num = 0;num <= 4;num++){
		printf("%d ",arr[num]);
		printf("%d ",*(p_num + num));
	}
	printf("\n");
	return 0;
}

#endif 

字符串

C语言里规定所有文字信息必须记录在一组连续的字符类型存储区里,所有文字信息必须用“ \0 ”,字符做结尾,这个字符的asscii码就是0,符合以上两个特征的内容叫做字符串。

字符串里‘ \ 0 ’,字符前面的部分是有效文字信息,所有字符串都可以采用字符类型指针表示。

字符串字面值

字符串字面值是一种字符串,列如

"abc" , "^&*^"

编译器在编译的时候自动在字符串字面值的末尾加上'' \0 ''字符,编译器在编译的时候会把字符串字面值替换成第一个字符所在存储区的地址,字符串字面值的内容在程序执行过程中不可以改变,程序中内容一样的字符串字面值在内存中其实是同一个。多个并列的字符串字面值会被自动合并成一个。

字符数组

字符数组也可以作为字符串使用,只有包含“ \0 ”字符的字符数组才可以作为字符串使用,可以使用字符串字面值对字符数组进行初始化(计算机会把字符串字面值里的“\0”字符也初始化到字符数组里)。

区别

字符数组里的字符串的内容可以修改,字符串字面值在程序执行中不能修改。

如何使用操作字符串

在printf函数调用语句里使用%s做占位符可以把字符串里所有文字显示在屏幕上。%s必须跟地址数据配合使用。不可以使用操作符操作字符串,C语言里提供一组标准函数用来操作字符串,为了使用这些标准函数需要包含string.h头文件。

strlen

​ 用来统计字符串里有效字符个数和sizeof计算结果不同

strcat

用来合并两个字符串,需要两个字符串做参数第一个参数必须是字符,数组里的字符串,把第二个参数里的所有有效字符追加到第一个,参数有效字符的后面,返回值就是第一个参数,可以用来代表合并后的字符串,如果合并后的字符串超过数组的范围,函数就会,修改不属于数组的存储区,这会造成严重错误

strncat

功能和strncat类似,但可以避免出现错误,第三个参数是字符个数

strcmp

用来比较两个字符串的大小,从前向后依次比较对字符,ASCII码大的字符所在的字符串就大,函数有两个参数,各表示一个字符串,返回值表示结果,返回值为1表示前一个字符串大,返回-1表示后一个字符串大,0表示一样大

strncmp

功能和strcmp类似,只能比较两个字符前n个字符

strcpy

把一个字符串里的有效字符复制到字符数组里,如果字符串的长度超过字符数组的长度就会修改不属于数组的存储区,这样会出现严重错误。

strncpy

功能和strcpy类似,但是可以避免出问题。有可能不复制‘ \0 ’字符

memset

用来把字符数组里多个存储区的内容设置成同一个字符

strstr

用来在一个字符串里查找另外一个字符串的位置,如果找不到则返回NULL

以下两个字符串相关函数使用的时候不需要包含string.h头文件

sprintf

按照格式把多个数字合并成一个字符串并记录到字符数组里

sscanf

按照格式从字符串里获得多个数字并记录到存储区里

以下两个字符串相关的函数可以把字符串里的数字转换成数字类型

为了使用这两个函数需要包含stdlib.h头文件

atoi

用来把字符串里开头的整数部分转换成整数类型

atof

用来把字符串里开头的浮点数部分转换成双精度浮点类型

如何从键盘获取字符串

在scanf函数调用语句里使用%s做占位符可以从键盘里得到一个字符串并记录到字符数组里;这种方法有可能造成严重错误(存储区不够,有空格)。

fgets

函数可以从键盘得到一个字符串并记录到字符数组里,这个函数可以避免scanf函数问题。这个函数有三个参数

1.数组米名称

2.数组里存储区个数

3.用stdin表示键盘

如果输入的内容不能把数组充满就会把用户最后输入的换行字符当作‘ \n ’字符也读到数组里。如果输入内容过多,就把无法处理的字符内容都留在输入缓冲区里等下次读取,在每次使用fgets函数从键盘得到字符串以后都应该删除输入缓冲区里可能存在的多余数据。

scanf("%*[^\n]");
scanf("%*c");

只有确定输入缓冲区里包含多于数据的时候才应该去删除这些多余数据。

练习:编写程序从键盘得到多个考试成绩(个数不超过5个),有效考试成绩范围从0-100;把所有考试成绩按照一下格式拼凑成一个字符串:

10,20,30,40,50

把得到的字符串显示在屏幕上

练习:编写函数实现atoi函数功能

/*
 *
 *编写函数实现atoi函数的功能
 *
 * */
#include<stdio.h>
#include<string.h>
int myatoi(const char *p_ch) {
	int ret = 0;
	const char *p_tmp = p_ch;


	/*while(*p_tmp >= '0' && *p_tmp <= '9') {
			ret = (10 * ret + *p_tmp - '0');
			p_tmp++;
	}*/

	while(1) {
		if(*p_tmp >= '0' && *p_tmp <= '9') {
			ret = (10 * ret + *p_tmp - '0');
		}
		else {
			break;
		}
		p_tmp++;
	}
	return ret;
}
int main() {
	char buf[10] = {0};
	int num = 0;
	printf("请输入一个字符串:");
	fgets(buf,10,stdin);
	if(strlen(buf) == 9 && buf[8] != '\n') {
		scanf("%*[^\n]");
		scanf("%*c");
	}
	num = myatoi(buf);
	printf("%d\n",num);
	return 0;
}

标签:字符,函数,int,num,数组,字符串
From: https://www.cnblogs.com/GQH1000/p/18508517

相关文章

  • 实现在一个字符串中查找另一个字符串的功能
    题目:实现字符串函数strstr的功能,在一个字符串中查找另一个字符串,若查找到则返回子串第一次出现的地址,若查找不到返回NULL。解题思路:在一个字符串(假设为str1)中查找另一个字符串(假设为str2)。思路是遍历整个字符串str1,如果出现与字符串str2首字母相同的字母,那么我从这个位置(注......
  • 2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQu
    2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组wordsContainer和wordsQuery,要对每个wordsQuery[i]找到一个与其有最长公共后缀的字符串。如果有多个字符串与wordsQuery[i]有相同的最长公共后缀,则返回在wordsContainer中最早出现的那个。最后,返回一个整数数组a......
  • 代码随想录算法训练营第七天|LeetCode 344.反转字符串、LeetCode 541.反转字符串Ⅱ、
    LeetCode 344.反转字符串题目链接:LeetCode344.反转字符串文章链接:代码随想录题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示......
  • 【Python中的字符串处理】正则表达式与常用字符串操作技巧!
    Python中的字符串处理:正则表达式与常用字符串操作技巧Python在字符串处理方面提供了丰富的内置功能和模块,能够帮助开发者处理各种复杂的文本操作。无论是简单的字符串拼接、替换,还是借助正则表达式(re模块)实现的模式匹配,Python都有强大的工具可以让我们高效处理文本数据......
  • 在C语言中如何实现字符串反转
    在C语言中,要实现字符串反转,基本的方法有三种:1、使用数组来存储字符串并反向输出;2、使用指针进行反向输出;3、使用递归方法将字符串反向输出。在这里,我们将详细介绍如何使用指针进行反向输出。一、使用指针进行反向输出在适用于字符串反转的许多方法中,使用指针实现字符串反转是......
  • C++获取当前时间并格式化为字符串
    代码一#include<iostream>#include<chrono>intmain(){ autonowTime=std::chrono::system_clock::now(); autonowTimeT=std::chrono::system_clock::to_time_t(nowTime); autopNowTm=std::localtime(&nowTimeT); charbuf[128]; std::strfti......
  • 第1关:练习-Java集合类之List的LinkedList之字符串反转
    任务要求参考答案重置记录评论12任务描述编程要求测试说明任务描述本关任务:使用LinkedList的addFirst方法实现字符串反转输出。编程要求仔细阅读右侧编辑区内给出的代码框架及注释,在Begin-End间编写程序代码,实现字符串反转输出,具体要求如下:接收给......
  • SQLite 数据库如何多行数据连接成字符串
    在使用SQLite数据库进行数据处理时,常常会遇到需要将多行数据连接成一个字符串的需求。举例来说,假设我们有一个存储用户名的表,想将这些用户名用逗号分隔组合成一个字符串,以便展示或进一步处理。SQLite本身不像某些其他数据库系统(如MySQL、PostgreSQL)那样原生支持直接的字符串聚......
  • (自用)C语言字符串初始化““和\0的问题
    chars[10]="";正常。应该是全部初始化为\0了?printf会输出空白 chars[10]='';报错。【带引号的字符串应至少包含一个字符】【空字符常量】【“初始化”:无法从“char”转换为“char[10]”】 chars[10]='0';报错。【应使用“{…}”初始化聚合对象】【“初始化”......
  • 代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串
    1leetcode151.翻转字符串里的单词题目链接:151.反转字符串中的单词-力扣(LeetCode)文章链接:代码随想录视频链接:字符串复杂操作拿捏了!|LeetCode:151.翻转字符串里的单词_哔哩哔哩_bilibili自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作,......