gpt4 book ai didi

c++ - 如何从文本文件中读取字符串并在某个字符处停止? C++

转载 作者:行者123 更新时间:2023-11-28 06:37:57 26 4
gpt4 key购买 nike

我正在解密一个用我的加密程序生成的加密文件。我将尝试解释整个场景,以便每个人都能了解我的程序究竟在做什么。

我的加密程序让用户输入一个字符串,然后将字符向右移动一个 8 到 15 之间的随机数。然后它将加密文件发送到一个名为 secret.dat 的目的地

它在加密文件中读取的内容是

10rovvys1237123&5#10

它首先告诉您字符被移动的数字是 (10),然后是加密字符串 (hello 123 123),空格使用空格之前的字符并将该字符移动 4('y ' 和 '7'),当加密终止时显示 '&' 字符。在“&”字符之后是用“#”字符分隔的数字,表示空格所在的位置。

所以首先使用解密程序我使用 ifstream 打开文件并读取一个整数用作我向左移动以加密它然后是我遇到问题的地方。我无法弄清楚如何将字符读入字符串直到“&”字符,以便我可以将这些字符恢复正常。我找到了一种获取它们的方法,但我不知道如何将它们放入字符串中。

这就是我所做的,我能够捕获字符直到 '&' 字符:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
//Declare Variables
int shift;
char character;
char endOfFile = '&';
ifstream inData;

//Open file
inData.open("secret.dat");

//Begin program
inData >> shift;
cout << shift << endl;

inData.get(character);

while(character != endOfFile)
{
if (character >= 'a' && character <= 'z')
{
character = ((character - 'a' - shift) % 26) + 'a';
}
if (character >= '0' && character <= '9')
{
character = ((character - '0' - shift) & 10) + '0';
}
cout << character;
inData.get(character);
}
return 0;
}

我的第二个问题是我用来将字符移回原位的公式,因为它似乎无法正常工作,因为我认为我需要做的就是更改我的加密公式,该公式只是将 shift 添加到减去 shift。但这是一个不同的问题,主要问题是获取字符并将它们放入字符串中,以便我以后可以使用它们。现在,循环只是抓取每个字符并将其放出,但我无法访问循环外第一个字符以外的字符。

任何帮助将不胜感激,因为我似乎无法在其他任何地方找到我的解决方案。

最佳答案

您可以使用 std::getline 将输入流读入字符串,直到某个字符/定界符:)

// Assume your inData stream contains "10rovvys1237123&5#10"

int shift = 0;
std::string encrypted;

inData >> shift;
std::getline(inData, encrypted, '&');

// Here
// shift = 10
// encrypted = "rovvys1237123"

至于向后移动,只要您简单地向每个字符添加一个整数值来移动您的字符串,您应该能够通过遍历每个字符并减去相同的值来执行相反的操作。像这样的东西:

std::string decrypted = "";
for (auto& character : encrypted) {
decrypted += character - shift;
}

关于c++ - 如何从文本文件中读取字符串并在某个字符处停止? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26477871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com