C++ 谁能帮我理解这个c++;密码?

C++ 谁能帮我理解这个c++;密码?,c++,for-loop,while-loop,C++,For Loop,While Loop,我向你解释这个项目的工作原理 步骤1:输入要运行循环的时间 步骤2:输入两个字符串s1和s2 输出:它将为您提供一个字符串s3,其中不包含字符串s2中的任何字符 问题:我无法理解for循环的工作原理,为什么hash的值是257,循环是如何工作的 代码如下所示 #include <iostream> using namespace std; #include<string.h> int main() { int t; cout<<"en

我向你解释这个项目的工作原理

步骤1:输入要运行循环的时间

步骤2:输入两个字符串s1和s2

输出:它将为您提供一个字符串s3,其中不包含字符串s2中的任何字符

问题:我无法理解for循环的工作原理,为什么hash的值是257,循环是如何工作的

代码如下所示

#include <iostream>
using namespace std;
#include<string.h>
int main()
{
    int t;
    cout<<"enter any no. to run the loop"<<endl;
    cin>>t;
    while(t--)
    {
        string s1,s2,s3;
        int i,j,l1,l2;
    cout<<"enter two strings s1 and s2"<<endl;
        cin>>s1>>s2;
        l1=s1.length( );
         l2=s2.length( );
         int hash[257];
         for(i=0;i<257;i++)
         {
             hash[i]=0;
         }
          for(i=0;i<l2;i++)
         {
             hash[s2[i]]++;
         }
         
          for(i=0;i<l1;i++)
         {
             if(hash[s1[i]]==0)
             s3=s3+s1[i];
         }
         cout<<s3<<endl;
         
    }
    return 0;
}
#包括
使用名称空间std;
#包括
int main()
{
int t;

cout代码计算
s1
中出现的字母的直方图,并复制出现次数为零的
s2
中的字母


任何
char
类型(不限于
[0256]
(!)

的范围)都可能崩溃。此程序会找出第一个字符串中哪些字符不包含在第二个字符串中

程序的输入示例:

1
abcdefghijklmnopqrstuvwxyz
helloworld
示例输出(感谢@mch的纠正)

编辑:注意这当然是区分大小写的,因为字符
a
a
产生不同的整数值

以下是对该节目的一些评论:

1
abcdefghijklmnopqrstuvwxyz
helloworld
#包括
使用名称空间std;
#包括
int main(){
//按照用户所说的次数执行整个程序
int t;
库特;
而(t--){
字符串s1、s2、s3;
int i,j,l1,l2;
//读取字符串并获得它们各自的长度
couts1>>s2;
l1=s1.长度();
l2=s2.length();
//包含257个元素的数组
int散列[257];
//使用0初始化数组的所有元素
对于(i=0;i<257;i++){
散列[i]=0;
}
//计算第二个字符串中出现的字符数
//s2[i]是s2中位置i处的字符
//将此字符的哈希值增加1
对于(i=0;is1中不包含在s2中的字母字符串
对于(i=0;icout上面有一条注释解释for循环


int-hash[257]
实际上可以是
int-hash[256]
。一个
字符中可以容纳256个不同的值(8位).

在您的代码中有三个
用于
循环,您难以理解哪一个?对于值
257
,代码似乎假定
char
无符号的
(它实际上是实现定义的),并且系统标准字母表有256个字母(这使得选择
257
有点奇怪,因为字符将被编号为
0
255
).你从哪里得到这段代码的?来源没有包含任何关于代码的解释吗?并以此作为一个教训,始终记录你的代码,并添加关于它做什么、为什么做什么、使用什么算法等的注释。先生,我想了解所有三个循环。旁注:
cin>>s2
读取一个单词,而不是一行,因此,
s2
hello
,而不是
hello World
。这可以通过查看输出来确认,其中包含
r
d
。@mch,感谢您的提示,我没有重复检查我的输出。