linux下的c语言入门 - day6

2024-05-20 20:08
文章标签 语言 linux 入门 day6

本文主要是介绍linux下的c语言入门 - day6,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一章是字符串和文本,虽然之前有提到过,但这次是系统化的课本学习,还是要好好学一下。

c中的字符串总是以\0结尾,所以字符串的长度永远比字符串中的字符数多1.而且在语句中只要遇到第一个\0时候,就表示字符串结束了。

接下来介绍一下多个字符串有关的库函数:

1.strcpy(string2,string2);

这是用来复制字符串的,将第二个参数指定的字符串复制到第一个参数指定的字符串当中。还有个类似的库函数是strncpy(destination,source,n),这个函数将一个字符串中的前n个字符赋值到另一个字符串当中。第一个参数是目标字符串,第二个参数是源字符串,打三个参数是一个size_t类型的整数,他制定了要复制的字符书。


2.strlen(str)

这是确定字符串的长度。


3.strcat(str1,str2)

使用库函数连接字符串,这个函数将用str2复制到str1的末尾。这可以大大降低难度。


strcmp(str1,str2)

比较两个字符串,返回一个小于,大于或等于0的int值,分别对应str1小于,大于,等于str2.


strstr(str, c)

首先是要把<string.h>头文件包含在文件里,函数在字符中搜索给定的字符。她的第一个参数是要搜索的字符串(是char数组的地址),第二个就是要查找的字符。这个函数会从字符串的开头开始搜索,返回在字符串中找到第一个给定字符的地址。有时候需要在字符串中查找子字符串。所以strstr()函数是这个头文件中声明的所有搜索函数中最有用的函数,他查找一个子字符串,返回找到的第一个子字符串的位置指针。如果找不到匹配的子字符串,就返回NULL。所以如果返回值不是NULL,就说明这个函数找到了所需的子字符串。


isalpha(),isdigit()

这两个函数中的参数是要测试的字符。如果这个字符在该函数的测试内容范围之内,所有这些函数都返回一个非零的int值,否则,返回0.这里注意,用了get()函数作为接受键盘的输入数函数时,有个优点:可以从键盘读入所有的字符(包括空白),直到按下回车键为止。而还有一个类似的函数fgets()他们之间的异同点是:他们都读取一个换行符来结束过程,但在输入换行符时,fgets()会存储'\n'字符,而gets()不会。因此,如果从见哦按双读取字符串,fgets()读取的字符串比gets()读取的字符串多一个字符。


toupper(),tolower()

这是<ctype.h>所包含的两个转换函数,是将大小写字母相互转化。eg:buffer[i] = toupper(buffer[i])


最后要给一个大程序,就是从键盘上输入一段任意长度的文本,确定该文本中每个单词的出现频率(忽略大小写),现在编写的有点复杂,不过在后续的学习当中会学到可以简化他的知识。

#include#include#include#include#define TEXTLEN 10000
#define BUFFERSIZE 100
#define MAXWORDS 500
#define WORDLEN 15
int main()
{
char text[TEXTLEN + 1];
char buffer[BUFFERSIZE];
char endstr[] = "*\n";
int i = 0;
const char space = ' ';
const char quote = '\'';
char words[MAXWORDS][WORDLEN + 1];
int nword[MAXWORDS];
char word[WORDLEN + 1];
int wordlen = 0;
int wordcount = 0;
printf("Enter text on an arbitrary number of lines.");
printf("\n Enter a line containing just an asterisk to end input: \n\n");
while(true)
{
if(!strcmp(fgets(buffer,BUFFERSIZE,stdin),endstr))
break;
if(strlen(text) + strlen(buffer) + 1 > TEXTLEN)
{
printf("Maximum capacity for text exceeded. Terminating program.");
return 1;
}
strcat(text,buffer);
}
for(i = 0; i < strlen(text); i++)
{
if(text[i] == quote || isalnum(text[i]))
continue;
text[i] = space;
}
int index = 0;
while(true)
{
while(text[index] == space)
++index;
if(text[index] == '\0')
break;
wordlen = 0;
while(text[index] == quote || isalpha(text[index]))
{
if(wordlen == WORDLEN)
{
printf("Maximun word length exceeded.Terminating program.");
return 1;
}
word[wordlen++] = tolower(text[index++]);
}
word[wordlen] = '\0';
bool isnew = true;
for(i = 0; i < wordcount ; i++)
if(strcmp(word,words[i]) == 0)
{
++nword[i];
isnew = false;
break;
}
if(isnew)
{
if(wordcount >= MAXWORDS)
{
printf("\n Maximum word count exceeded.Terminating program.");
return 1;
}
strcpy(words[wordcount],word);
nword[wordcount++] = 1;
}
}
for(i = 0;i < wordcount; i++)
{
if( !(i%3) )
printf("\n");
printf("%-15s%5d",words[i],nword[i]);
}
return 0;
}

下一次是作业,还有一些字符串的补充,加油~





这篇关于linux下的c语言入门 - day6的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995947

相关文章

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的