gpt4 book ai didi

c++ - 将可变字符串转换为char数组c++

转载 作者:行者123 更新时间:2023-11-30 05:40:15 25 4
gpt4 key购买 nike

我发现了如此多的此类问题帖子 - 我说的是“将字符串转换为字符数组” - 但这些解决方案对我来说都不起作用,试图转换 cin >> 文本 放入一些字符数组 textArray[1024] 中,然后我可以将其转换为 list 因为我认为它更容易使用。

问题是:空格。每次那里有空间时,它都会跳过以下操作并用我自己的错误消息打我。

它用于某些加密器(下面的代码)。

如果有更简单的方法,请告诉我。

#include <iostream>
#include <string>
#include <fstream>
#include <list>
#include "encryptor.h"

using namespace std;

void encrypt()
{
string text;
char textArray[1024];
list<char> listText;
list<char>::iterator it;
int textSize;
string code;
bool fail = false;
string segment;
string fileName;

cout << "Now enter your text. (max 1024 chars)" << endl;
cin >> text;

textSize = text.size();

//string to char[]
//none of these work
strncpy(textArray, text.c_str(), sizeof(textArray));
textArray[sizeof(text) - 1] = 0;

strcpy_s(textArray, text.c_str());

for (int i = 0; i < text.length(); i++)
{
textArray[i] = text[i];
}

aText[text.length()] = '\0';

text.copy(textArray, text.length()+1);



//char[] to list
for(int i = 0; i < textSize; i++)
{
char *c = new char(textArray[i]);
listText.push_back(*c);
}

//Going through list
//for every char there's a special segment added to the string
for(it = listText.begin(); it != listText.end(); it++)
{
if(fail == true) break;

switch (*it)
{
case 'a':
case 'A':
{
segment = "XQ7";
} break;
{/*---*/} //I just let everything from b - z and 0 - 9 out for this post
case ' ':
{
segment = "Z 7";
} break;
case '.':
{
segment = "Z 8";
} break;
case ',':
{
segment = "Z 4";
} break;
default:
{
cout << "There's a special char this program doesn't understand. It is "
cout << *it << endl;
cout << "Do it again" << endl;
fail = true;
} break;
}

code = code + segment;
}

do
{
cout << "\n\nname of the file: ";
cin >> fileName;

if(fileName != "")
{
ofstream write;
write.open(fileName + ".txt");
write << code;
write.close();
} else {
cout << "Name shouldn't be empty!" << endl;
}
} while(fileName == "");
}

最佳答案

您的主要问题不是将字符串 text 转换为字符数组,而是您没有从 stdin 捕获整行。

cin >> text; 将从 stdin 读取直到遇到第一个空白字符。这就是为什么您遇到空间问题的原因。您只将字符读入 text 直到第一个空白字符。相反,您需要使用 getline() .将 cin >> text; 替换为 getline(cin, text); 将从 stdin 读取整行 包括任何空白字符

我提供了一个完整的示例,用于从 stdin 中读取一行文本并将其转换为下面的字符列表。它完全跳过了在将字符串转换为列表之前将字符串转换为字符数组的需要。

#include <iostream>
#include <list>
#include <string>

using namespace std;

int main() {
string s;
list<char> text;

getline(cin, s);

for (string::iterator it = s.begin(); it != s.end(); ++it) {
text.push_back(*it);
}

// Verification
cout << "You entered " << text.size() << " characters\nThey were:\n";
for (list<char>::iterator it = text.begin(); it != text.end(); ++it) {
cout << *it;
}
cout << endl;
}

关于c++ - 将可变字符串转换为char数组c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31754167/

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