(C语言)字符串函数strcpy和strlen的实现,以及简单的文字编程题(派大星看了都会写)

简介: (C语言)字符串函数strcpy和strlen的实现,以及简单的文字编程题(派大星看了都会写)

一、字符串库函数strcpy的实现


#include<stdio.h>
//#include<string.h>
#include<assert.h>
void my_strcpy(char* dest, char* src)
{
  assert (dest != NULL);//断言传进来的不会是空指针
  assert(src != NULL);
  while (*src != '\0')//设置循环条件,字符串最后会有个'\0'
  {
  *dest = *src;
  dest++;
  src++;
  }
  *dest = *src;//处理'\0',将'\0'也拷贝进去
}
//简写版
void my_strcpy(char* dest, char* src)
{
  assert(dest && src);
  while (*dest++ = *src)
  {
  ;
  }
}
int main()
{
  char arr1[20] = "xxxxxxxxxxxxx";
  char arr2[] = "hello";
  my_strcpy(arr1, arr2);
  printf("%s\n", arr1);
  return 0;
}


二、字符串库函数strlen的实现


#include<stdio.h>
//#include<string.h>
#include<assert.h>
int my_strlen (char *dest)//定义一个int 类型的函数
{
  int i=0;
  assert(dest!=NULL);
  while (*dest != '\0')//当指针向后运动没遇到'\0',i++
  {
  i++;
  dest++;
  }
  return i;//返回i
}
int main()
{
  char arr1[20] = "xxxxxxxxxxxxx";
  int i=0;
  i = my_strlen(arr1);//定义一个i去接收返回值
  printf("%d\n", i);
  return 0;
}


三、简单的文字编程题


日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

现在请根据这些信息,写一个程序来确定到底谁是凶手

#include<stdio.h>
int main()
{
  int killer = 0;
  for (killer = 'a'; killer <= 'd'; killer++)
  {//利用了判断语句对就为1,错就为0的特点,加上字符所对应的ASCLL码值是连续的
  if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
  {
    printf("%c\n", killer);
  }
  }
  return 0;
}
相关文章
|
4天前
|
NoSQL C语言 索引
十二个C语言新手编程时常犯的错误及解决方式
C语言初学者常遇错误包括语法错误、未初始化变量、数组越界、指针错误、函数声明与定义不匹配、忘记包含头文件、格式化字符串错误、忘记返回值、内存泄漏、逻辑错误、字符串未正确终止及递归无退出条件。解决方法涉及仔细检查代码、初始化变量、确保索引有效、正确使用指针与格式化字符串、包含必要头文件、使用调试工具跟踪逻辑、避免内存泄漏及确保递归有基准情况。利用调试器、编写注释及查阅资料也有助于提高编程效率。避免这些错误可使代码更稳定、高效。
34 12
|
2天前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
1天前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲
|
2天前
|
C语言
【C语言】模拟实现深入了解:字符串函数
【C语言】模拟实现深入了解:字符串函数
|
2天前
|
Serverless 编译器 C语言
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
|
1月前
|
Linux C语言
C语言 多进程编程(四)定时器信号和子进程退出信号
本文详细介绍了Linux系统中的定时器信号及其相关函数。首先,文章解释了`SIGALRM`信号的作用及应用场景,包括计时器、超时重试和定时任务等。接着介绍了`alarm()`函数,展示了如何设置定时器以及其局限性。随后探讨了`setitimer()`函数,比较了它与`alarm()`的不同之处,包括定时器类型、精度和支持的定时器数量等方面。最后,文章讲解了子进程退出时如何利用`SIGCHLD`信号,提供了示例代码展示如何处理子进程退出信号,避免僵尸进程问题。
|
1月前
|
消息中间件 Unix Linux
C语言 多进程编程(五)消息队列
本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
|
1月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
1月前
|
Linux C语言
C语言 多进程编程(七)信号量
本文档详细介绍了进程间通信中的信号量机制。首先解释了资源竞争、临界资源和临界区的概念,并重点阐述了信号量如何解决这些问题。信号量作为一种协调共享资源访问的机制,包括互斥和同步两方面。文档还详细描述了无名信号量的初始化、等待、释放及销毁等操作,并提供了相应的 C 语言示例代码。此外,还介绍了如何创建信号量集合、初始化信号量以及信号量的操作方法。最后,通过实际示例展示了信号量在进程互斥和同步中的应用,包括如何使用信号量避免资源竞争,并实现了父子进程间的同步输出。附带的 `sem.h` 和 `sem.c` 文件提供了信号量操作的具体实现。
|
C语言 机器学习/深度学习
C语言及程序设计初步例程-36 用循环处理文字
贺老师教学链接  C语言及程序设计初步 本课讲解 统计字符个数 #include &lt;stdio.h&gt; int main() { char c; int count=0; while((c=getchar())!='\n') { count++; } printf("\n"); printf("There are
921 0