找最小的字符串

简介: 找最小的字符串

901256929b054fd09bfbcc9b21d8e5c2.png

2dd404368ad040719b75a18a09b28ddb.png

  要想完成这个程序,我们就要知道字符串的大小是怎么比较的。如果要比较字符串的大小,就要借助字符串比较函数strcmp(s1,s2)。因为字符串比较函数是一个库函数,所以我们要在main函数的前面包含string.h的头文件。


  那字符串比较函数strcmp(s1,s2)怎么用呢?容我慢慢道来。首先函数strcmp()中的参数s1和s2可以是字符数组名又可以是字符串常量。函数strcmp()返回一个整数,给出字符串s1和s2的比较结果:


若s1和s2相等,返回0。

若s1大于s2,返回一个正数。

若s1小于s2,返回一个负数。

  假设str1和str2都是字符数组,在C语言中,str1==str2、str1>=str2和str1<=str2比较的是两个字符数组的首元素地址。而strcmp(str1,str2)==0、strcmp(str1,str2)>=0和strcmp(str1,str2)<=0比较两个字符串的内容。


  字符串的比较规则是:从两个字符串的首字符开始,依次比较相对应的字符(比较字符的ASCII码),知道出现不同的字符串或遇到'\0'为止。如果所有的字符都相等,返回0;否则,以第一个不相同字符的比较结果为准,返回这两个字符的差,即第一个字符串的字符减去第二个字符串的字符得到的差。例如:


strcmp("love","love")的值等于0,说明"love"和"love"相等。

strcmp("compute","compare")的值大于0,因为('u'-'a')是个正数,也就说明"compute"大于"compare"。

strcmp("happy","sad")的值小于0,因为('h'-'s')是个负数,也就说明"happy"小于"sad"。

strcmp("sea","seat")的值小于0,因为("\0"-"t")是个负数,也就说明"sea"小于"seat"。

一般来说,strcmp()函数的值为1,0和-1。  


ASCII码表

d8d89da94f084831a7cd8c8a21dc6167.png


 讲到这,相信大家已经差不多能够把找最小的字符串的程序写出来了。


  想要把这个程序完成,我们还要借助一个函数,就是字符串函数strcpy(s1,s2)。该函数把字符串s2复制到s1,直到s2中的'\0'为止。同时要注意,s1要有足够的空间容纳s2,且s1中的内容被完全覆盖,函数返回的是s1。与strcmp()函数有所不同的是,strcpy(s1,s2)中的参数s1必须是字符数组名,参数s2可以是字符数组名或字符串常量。例如:


char s1[80],s2[80],from[80]="happy";

strcpy(s1,from);

strcpy(s2,"love");


 第二条语句调用了函数strcpy()把from中的字符复制给s1;第三条语句把字符串"love"复制给s2后,数组s1中存放了"happy",数组s2中存放了"love"。


 现在我们找到了这个程序所需要的两个函数,那么这道题我们就可以轻松地做出来了。


#include <stdio.h>
#include <string.h>
int main()
{
  int n;
  scanf("%d\n",&n);  //n为行数
  char str[n][80];   //80列为了字符串不超过80个字符
  char Min[80];
  for(int i=0;i<n;i++)
  {
    scanf("%s",str[i]);
  }
  strcpy(Min,str[0]);  //先给字符串Min赋个初值
  for(int i=0;i<n;i++)
  {
    if(strcmp(Min,str[i])>0)  //调用strcmp()函数来判断字符串的大小
    {
      strcpy(Min,str[i]);     //符合条件就改变字符串Min的值
    }
  }
  printf("Min is: %s",Min);
  return 0;
}
相关文章
|
1月前
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
|
1月前
|
算法 测试技术 C#
【位运算 试填法】【推荐】3022. 给定操作次数内使剩余元素的或值最小
【位运算 试填法】【推荐】3022. 给定操作次数内使剩余元素的或值最小
|
1月前
|
算法 测试技术 C#
【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
|
1月前
|
Python
计算小于或等于n的非负整数区间包含的1的数量
计算小于或等于n的非负整数区间包含的1的数量
26 0
|
10月前
|
存储 算法 JavaScript
设计并实现一个函数, 功能为给定一个存储为随机整数的数组,从中删除所有值为i的整数
设计并实现一个函数, 功能为给定一个存储为随机整数的数组,从中删除所有值为i的整数
长度最小的子数组
长度最小的子数组
7-10 找最小的字符串 (15 分)
7-10 找最小的字符串 (15 分)
281 0
数组——209.长度最小的子数组
本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助

热门文章

最新文章