字谜字符数组

如何解决字谜字符数组

所以我的C ++书中有这种算法

int anagrams(char *x,char *y) {
  char *p;
  if (!*x && !*y) return 1;
  p = strchr(y,*x);
  if (!p) return 0;
  *p = NULL;
  strcat(y,p + 1);
  return anagrams(x + 1,y)
}

它使用x个第一个元素,验证y是否具有,如果y具有,则将其删除。我不太了解 因此,strchr返回一个指向x在y中出现的指针。在那之后,我不太了解。顺便说一句

char a[] = "children" ;
char *p = strchr(a,'i') ;
*p = NULL";

为什么“ h”之后的所有内容都消失了? P指向“ i”,所以不应该只是消失“ i”吗? 谢谢! (我仍然是初学者)

解决方法

关于为什么'h'之后的所有内容都消失了?

char a[] = "children" ;
char *p = strchr(a,'i') ;
*p = NULL";
  1. 有一个错字:可能是*p = NULL;(双引号"是错误的。)

  2. p的类型为char*。应用取消引用运算符*将导致pointe类型。因此,表达式 *p的类型为char。 (请不要将它与声明了char *p类型的变量p声明 char*混淆。)NULL旨在表示空指针。 (在C语言中,可能将其定义为#define NULL (void*)0。在C ++中,nullptr应该比NULL更受青睐。)为char分配空指针会令人困惑,但是C编译器(以及C ++编译器)可能会将其隐式转换回普通的0

    我使用gcc -std=c11g++ -std=c++17进行了编译。在这两种情况下,编译器都会发出警告,但会提供可执行的二进制文件:

    • C: Live Demo on coliru
      输出:
      warning: assignment to 'char' from 'void *' makes integer from pointer without a cast [-Wint-conversion]
        *p = NULL;
      
    • C++: Live Demo on coliru
      输出:
      warning: converting to non-pointer type 'char' from NULL [-Wconversion-null]
        *p = NULL;
      

    因此,应该是*p = 0;或更清晰的*p = '\0';,它在语义上是相同的,但更清楚地揭示了意图。

考虑到这一点,固定版本为:

char a[] = "children" ;
char *p = strchr(a,'i') ;
*p = '\0';

它使用i覆盖\0元素,该元素是C字符串中的字符串终止符。

char a[]之前:

{ 'c','h','i','l','d','r','e','n','\0' }

并在此分配后变为

{ 'c','\0','\0' }

因此,它仍然具有相同的长度,但是将其与C字符串函数(例如printf("%s",a);)一起使用时,将考虑找到的第一个字符串终止符。 因此,它将仅打印ch

演示示例:

#include <cstring>
#include <cstdio>
#include <iomanip>
#include <iostream>

int main()
{
  char a[] = "children" ;
  char *p = strchr(a,'i') ;
  *p = '\0';
  // printing a c string
  printf("a[]: '%s'\n",a);
  // print a[] element wise
  std::cout << "a[]: {";
  const char *sep = " ";
  for (char c : a) {
    std::cout << sep << '\'';
    if (c >= ' ' && c < '\x7f') std::cout << c;
    else std::cout << '\\' << std::oct << (unsigned)(unsigned char)c << std::dec;
    std::cout << '\'';
    sep = ",";
  }
  std::cout << " }\n";
}

输出:

a[]: 'ch'
a[]: { 'c','\0' }

Live Demo on coliru


关于OPs C / C ++书的注释:

事实上,C ++语言是从已经存在的C语言中演变而来的。C和C ++仍然彼此相关。例如。 C标准库的一部分被C ++标准库采用。

不过,这是两种具有各自标准的独立语言。

  • 有些C语句也可以在C ++中使用。
  • C中有些东西在C ++中的工作有点不同。
  • C中有些东西在C ++中不起作用,反之亦然。

最后一个示例:

  • auto是C中有效的存储类。在C ++中,此含义自C ++ 11起已失效,并且关键字具有新的语义:placeholder type specifier
  • Variable Length Arrays是C99标准(及更高版本)的可选功能,但不是任何C ++标准的可选功能。某些编译器(例如g++)将其作为C ++中的专有扩展来支持。
  • Type Punning with union在某种程度上被C标准合法化,但被C ++标准禁止。
  • 当然,C ++引入了各种新关键字(具有新的语义),例如classtemplate在C中不可用,将被解释为普通标识符。

一个(当然有点人为设计的)示例,它表明相同的源代码在C和C ++中可能导致不同的语义:

  auto a = 'a';
  printf("sizeof a: %d\n",(int)sizeof a);

在C11中:

#include <string.h>
#include <stdio.h>

int main()
{
  auto a = 'a';
  printf("sizeof a: %d\n",(int)sizeof a);
}

输出:

sizeof a: 4

Live Demo on coliru

auto是存储类。 auto a中缺少类型。 C编译器默认将其设置为int

在C ++ 11中:

#include <cstring>
#include <cstdio>

using std::printf; // pull printf() into global scope

int main()
{
  auto a = 'a';
  printf("sizeof a: %d\n",(int)sizeof a);
}

输出:

sizeof a: 1

Live Demo on coliru

auto从其初始化确定a的类型。在C ++中,字符常量的类型为char(与C相对应,字符常量的类型为int)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res