第六章 利用数组处理批量数据(字符串的使用和折半查找)

2024-09-01 09:20

本文主要是介绍第六章 利用数组处理批量数据(字符串的使用和折半查找),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

例子
逆序打印数组
#include<stdio.h>
int main(){int i=0;int arr[10];for(i=0;i<10;i++) {arr[i]=i; }for(i=9;i>=0;i--){printf("%d ",arr[i]);}
} 
冒泡排序
#include<stdio.h>
int main(){int i=0;int arr[10]={34,67,90,43,124,87,65,99,132,26};printf("排序前:\n");for(i=0;i<10;i++){printf("%d ",arr[i]);}printf("\n");for(i=0;i<9;i++){int j=0;for(j=0;j<9-i;j++){if(arr[j]>arr[j+1]){int temp=arr[j];;arr[j]=arr[j+1];arr[j+1]=temp; }}}printf("排序后:\n");for(i=0;i<10;i++){printf("%d ",arr[i]);}
} 
有多少个单词 
#include<stdio.h>
#include<string.h> 
int main(){char str[1000]={0};gets(str);int i=0;int word=0;for(i=0;str[i]!='\0';i++){if(str[i]!=' '&&(str[i+1]==' '||str[i+1]=='\0'))word++;} printf("%d\n",word);return 0;} 
#include<stdio.h>
#include<string.h> 
int main(){char str[1000]={0};gets(str);int i=0;int word=0,num=0;for(i=0;str[i]!='\0';i++){if(str[i]==' ')word=0;else if(word==0){ //根据字符 判断   第一个单词直接进入 后续遇空格后第一个字符num++ word=1;num++;}}printf("%d\n",num);return 0;} 

函数

#include<string.h>

        puts函数 输出字符串的函数
        gets函数 输入字符串的函数
#include<stdio.h>
#include<string.h> 
int main(){char str[10]={0};gets(str);puts(str);return 0;} 
        strcat函数 字符串连接函数
#include<stdio.h>
#include<string.h> 
int main(){char str[30]="cc";char str1[10]="acccj";strcat(str,str1);printf("%s\n",str);return 0;} 
        strcpy和strncpy 字符串复制函数
#include<stdio.h>
#include<string.h> 
int main(){char str[10]="ccbbaabbc";char str1[6]="acccj";strcpy(str,str1);printf("%s\n",str);//acccj printf("%c\n",str[8]); //c char str2[10]="ccbbaabbc";char str3[6]="acccj";strncpy(str2,str3,5);//acccjabbcprintf("%s\n",str2);return 0;} 
        strcmp 字符串比较函数
#include<stdio.h>
#include<string.h> 
int main(){char str[10]="ccbbaabbc";char str1[6]="acccj";if(strcmp(str,str1)>0){printf(">\n");} else if(strcmp(str,str1)==0){printf("=\n");}else{printf("<\n");}strcpy(str,str1);if(strcmp(str,str1)>0){printf(">\n");} else if(strcmp(str,str1)==0){printf("=\n");}else{printf("<\n");}return 0;} 
        strlen  测字符串长度的函数
#include<stdio.h>
#include<string.h> 
int main(){char str[10]="ccbbaabbc\0";char str1[6]="accc";printf("%d\n",strlen(str));printf("%d\n",strlen(str1));return 0;} 
        strlwr 转换为小写的函数
        strupr 转换为大写的函数

        

#include<stdio.h>
#include<string.h> 
int main(){char str[10]="abc";printf("%s\n",strupr(str)); //ABCprintf("%s\n",str); //ABCprintf("%s\n",strlwr(str)); //abc return 0;} 
课后习题
用筛选法求100以内的素数
#include<stdio.h>
#include<math.h> 
int main(){int arr[101]={0};int i=1;for(i=1;i<=100;i++){arr[i]=i; }arr[1]=0;for(i=2;i<sqrt(100);i++){int j=0;for(j=i+1;j<=100;j++){if(arr[i]!=0&&arr[j]!=0){if(arr[j]%arr[i]==0){//能被素数整除arr[j]=0; }}} }for(i=2;i<=100;i++){if(arr[i]!=0){printf("%d ",arr[i]);}}return 0;} 
用选择法对10个整数排序
#include<stdio.h>
int main(){int arr[10]={0};int i=0;for(i=0;i<10;i++){scanf("%d",&arr[i]);printf("arr[%d]=%d\n",i,arr[i]);} printf("排序前\n"); for(i=0;i<10;i++){printf("%d ",arr[i]); }//先找到最小的数的索引 让它和当前i位置的数交换 int min=0;for(i=0;i<10;i++){min=i;//重置当前位置 int j=0;for(j=i+1;j<10;j++){if(arr[min]>arr[j]){min=j;}}int temp=arr[i];arr[i]=arr[min];arr[min]=temp;}printf("\n");printf("排序后\n");for(i=0;i<10;i++){printf("%d ",arr[i]); }return 0;} 
求对角线元素之和
#include<stdio.h>
int main(){int arr[3][3]={1,2,3,4,5,6,7,8,9};int sum=0;int sum1=0;int i=0,j=0;for(i=0;i<3;i++){for(j=0;j<3;j++){if(i==j){sum+=arr[i][j];}}}for(i=0;i<3;i++){for(j=0;j<3;j++){if(i+j==2)sum1+=arr[i][j];}}printf("%d\n",sum);printf("%d\n",sum1);  return 0;} 
插入元素进数组
#include<stdio.h>
int main(){int arr[11]={0,1,2,3,4,5,6,7,8,9};
//	int arr[11]={0,0,0,0,0,0,0,0,0,0};
//	int arr[11]={9,8,7,6,5,4,3,2,1,0};int i=0;int num=0;scanf("%d",&num); if(arr[0]>arr[9]){//逆序  987654321 for(i=9;i>=0;i--){if(num>arr[i]){arr[i+1]=arr[i];}else{arr[i+1]=num;break;}if(i==0){arr[i]=num;//比完也没跳出循环 } }}else{//顺序 或者 00000 for(i=9;i>=0;i--){if(num<arr[i]){arr[i+1]=arr[i];}else{arr[i+1]=num;break;}if(i==0){arr[i]=num;//比完也没跳出循环 } }} for(i=0;i<11;i++){printf("%d ",arr[i]);}return 0;} 
逆序重新存放
#include<stdio.h>
int main(){
//	int arr[10]={0,1,2,3,4,5,6,7,8,9};int arr[5]={8,6,5,4,1}; int len=sizeof(arr)/sizeof(arr[0]);int i=0;for(i=0;i<len/2;i++){int temp=arr[i];arr[i]=arr[len-1-i];arr[len-1-i]=temp;} for(i=0;i<len;i++){printf("%d ",arr[i]);}return 0;} 
打印杨辉三角
#include<stdio.h>
int main(){int arr[11][11];int i=0;int j=0;//找规律 对角线都为1 第一行都为1 for(i=1;i<=10;i++){for(j=1;j<=10;j++){if(j==1)arr[i][j]=1;else if(i==j)arr[i][j]=1;else arr[i][j]=arr[i-1][j]+arr[i-1][j-1];}}for(i=1;i<=10;i++){for(j=1;j<=i;j++){printf("%2d ",arr[i][j]);}printf("\n");} return 0;} 
魔方阵
#include<stdio.h>
int main(){int n=0;scanf("%d",&n);  int arr[10][10]={0};int i=0;int j=0;int row=0;int col=0; for(i=1;i<=n;i++){for(j=1;j<=n;j++)arr[i][j]=0;} //第一行的中间放1arr[1][n/2+1]=i;row=1;col=n/2+1;for(i=2;i<=n*n;i++){row-=1;col+=1;if(row<1)//防止row溢出 row+=n;if(col>n)//防止col溢出 col%=n;if(arr[row][col]==0){arr[row][col]=i;} else{row+=2;//row可能溢出 col-=1;//col可能溢出 if(col<1)col+=n;if(row>n)row%=n; arr[row][col]=i;}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%d ",arr[i][j]); } printf("\n");}return 0;
} 
#include<stdio.h>
int main(){
int a[15][15],i,j,k,p,n;
p=1;
while(p==1){printf("1~15");scanf("%d",&n);if((n!=0)&&(n<=15)&&(n%2!=0)){p=0;}for(i=1;i<=n;i++){for(j=1;j<=n;j++){a[i][j]=0;}}//建立魔方阵
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++){i=i-1;j=j+1;if((i<1)&&(j>n)){i+=2;j-=1;}else{if(i<1)i=n;if(j>n)j=1;}if(a[i][j]==0)a[i][j]=k;else{i+=2;j-=1;a[i][j]=k; } 
} 
} 
for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%d ",a[i][j]); } printf("\n");}return 0;
} 
鞍点
#include<stdio.h>
int main(){//测试数据 
//	1 2 3 4 5
//	2 4 6 8 10
//	3 6 9 12 15
//	4 8 12 16 20//	1 2 3 4 11
//	2 4 6 8 12
//	3 6 9 10 15
//	4 8 12 16 7int arr[4][5]={0};int i=0;int j=0;int n=0;printf("请输入数组数据\n");for(i=0;i<4;i++){for(j=0;j<5;j++){scanf("%d",&arr[i][j]);}}int flag=1; //为1说明有一个鞍点int ii=0; int jj=0;//标记最大的一行j在哪 for(i=0;i<4;i++){int max=arr[i][0];//标记一个最大值for(j=1;j<5;j++){if(arr[i][j]>max){ii=i;jj=j;max=arr[i][j];}}for(n=0;n<4;n++){if(arr[n][jj]<max)flag=0;}if(flag==1)break;}if(flag)printf("arr[%d][%d]=%d\n",ii,jj,arr[ii][jj]); elseprintf("没找到\n");return 0;
} 
二分查找
#include<stdio.h>
int main(){
//	int arr[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};int arr[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};int left=0;int right=sizeof(arr)/sizeof(arr[0]);int mid,flag=0;int num;//需要查找的那个数scanf("%d",&num); while(left<=right){mid=(left+right)/2;if(num==arr[mid]){flag=1;//成功找到该元素 退出循环break; }else{//该数组从大到小排序 if(num>arr[mid]){right=mid-1;}else{left=mid+1;} }}if(flag==1)printf("found! 循环为%d\n",mid+1);elseprintf("No found!\n"); return 0;
} 
判断字符数量
#include<stdio.h>
#include<string.h>
int main(){char text[3][80];int i=0,j=0;int upstring=0;//大写字符int lowstring=0;//小写字符int dig=0;//数字int space=0;//空格字符int other=0;//其它字符 for(i=0;i<3;i++){printf("please input line %d:\n",i+1);gets(text[i]);for(j=0;j<80&&text[i][j]!='\0';j++){if(text[i][j]>='A'&&text[i][j]<='Z'){upstring++;}else if(text[i][j]>='a'&&text[i][j]<='z'){lowstring++;}else if(text[i][j]>='0'&&text[i][j]<='9'){dig++;}else if(text[i][j]==' '){space++;}else{other++;}}}printf("大写字母个数:%d\n",upstring);printf("小写字母个数:%d\n",lowstring);printf("数字个数:%d\n",dig);printf("空格个数:%d\n",space);printf("其它字符个数:%d\n",other);return 0;
} 
打印图案 
#include<stdio.h>
//* * * * *
//  * * * * *
//    * * * * *
//      * * * * *
//        * * * * *int main(){int i=0;int j=0;for(i=0;i<5;i++){for(j=0;j<5+i;j++){if(j<i){printf("  ");}else{printf("* ");}}printf("\n");}return 0;
} 
转译密文
#include<stdio.h>
#include<string.h>
//26-(a-'A')+'A'+1 ---->25-a+'A'+'A'
//R droo erhrg Xsrmz mvcg dvvp.int main(){char text[80],trans[80];gets(text);int i=0;for(i=0;i<80;i++){if((text[i]>='a')&&(text[i]<='z')){trans[i]=(char)(25-text[i]+'a'+'a');}else if((text[i]>='A')&&(text[i]<='Z')){trans[i]=(char)(25-text[i]+'A'+'A');}else{trans[i]=text[i];}}printf("%s\n",trans);return 0;
} 
模拟strcat
#include<stdio.h>int main(){char s1[80],s2[40];int i=0,j=0;printf("input string1:\n");scanf("%s",s1);printf("input string2:\n");scanf("%s",s2);while(s1[i]!='\0')i++;while(s2[j]!='\0'){s1[i++]=s2[j++];}s1[i]='\0';printf("new String is -> %s\n",s1);return 0;}
模拟strcmp
#include<stdio.h>int main(){char s1[40],s2[40];int num=0;gets(s1);gets(s2);int i=0;while(s1[i]==s2[i]&&s1[i]!='\0')i++;if(s1[i]=='\0'&&s2[i]=='\0')	num=0;elsenum=s1[i]-s2[i];printf("result:%d\n",num);return 0;}
模拟strcpy
#include<stdio.h>
#include<string.h> int main(){char s1[40]="sd",s2[40];printf("原来的s1->:%s\n",s1);scanf("%s",s2);int i=0;//=strlen是为了把\0也拷过去 for(i=0;i<=strlen(s2);i++)s1[i]=s2[i];printf("%s\n",s1);return 0;}

这篇关于第六章 利用数组处理批量数据(字符串的使用和折半查找)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件