gpt4 book ai didi

c++ - 文件输出为十六进制?

转载 作者:太空宇宙 更新时间:2023-11-04 13:26:11 25 4
gpt4 key购买 nike

我正在制作一个程序,它会在评论中添加我的姓名、日期、文件名以及对它的功能的描述。它还会查找任何 intvoid函数,添加每个函数的功能描述。我已经完成了这些步骤!

我创建了一个 vector<string>它将整个文件读入自身。然后它搜索任何 voidint vector 中的函数。如果它找到 int它叫string findParameters找到 int 的参数并在描述中列出它们。

示例:

/*THE DESCRIPTION THAT THE PROGRAM MADE IS BELLOW*/

/*Function: int nDigits
Description:
Description of the function
Parameters:
long long number: Description
Returns:
returnVal: Description
*/

/*THE FUNCTION THE PROGRAM WAS LOOKING FOR IS BELLOW*/
int nDigits(long long number){


int counter;
for (counter = 0; number > 0; counter++){
number = number / 10;

}

return counter;

}

问题

程序在不超过 160 行时运行良好,但当我输出时以及当我尝试在记事本中打开它时,超过它的任何内容都会将所有内容转换为十六进制,除了最后几个函数外,我的大部分代码都被删除了。

文件输出示例

0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0020 2020 2020 200d 0a20 2020 2020
2020 2063 6f75 6e74 6572 2b2b 3b0d 0a20
2020 2020 2020 2066 616b 655f 6e75 6d62
6572 202f 3d20 3130 3b0d 0a20 2020 207d
0d0a 2020 2020 0d0a 2020 2020 0d0a 2020

当然有大约 400 行。

我不知道发生了什么,所以非常感谢任何帮助!我相信这可能限制了我在 vector 中放入多少行?

我的代码

查找参数函数

string findParameters(string line, string outputFileName, vector<string> &list_parameters){


ofstream outFile;
outFile.open(outputFileName, ios::out);
int comma;
string something;
int length;
int parstart;
int parend;
int last;
if (outFile.is_open()) {

if (line.find("(") != string::npos) {
last = parstart = line.find("(",0) + 1;

if (line.find(")", parstart + 1) != string::npos) {
parend = line.find(")", parstart + 1) + 1;



do {
comma = line.find(",", last+1);

if (comma == string::npos) {
length = parend - last;
something = line.substr(last, length-1);

list_parameters.push_back("\n " + something);
}
else {
length = comma - last;
something = line.substr(last, length);

list_parameters.push_back("\n " + something);
last = comma+1;
}
} while (comma != string::npos);




}
}
outFile.close();
}
else {
cout << "\nfile find parameters did not open";
}

return "";

}

输出 header 函数

    //Starting Header
//File Name
outFile << "/* \nFilename: " << outputFileName;

//Date
char date[9];
_strdate_s(date);
outFile << "\n\nDate: " << date << "\n";
//Description
outFile << "\nProgrammer: Dyrenex\n\nDescription:\n //Description of what the code in the file is meant to do and how it does what it is meant to do" << "\n";
outFile << "\n\n */ \n\n";



size_t found;
//Writing the Rest of Input File
while (isDone != existingFile.size()){

//Finding void functions
line = existingFile[isDone];
if (line.find("void") != string::npos){
//cout << "\nFound a void!" << "\n";
outFile << "\n/*Function: \nDescription:\n Description of the function\nParameters:" <<
"\n Parameters here\n Returns:\n returnVal:*/";

}
else if (line.find("int",0) != string::npos) {
int intstart = line.find("int");

if (line.find("(", intstart + 1) != string::npos) {
int parstart = line.find("(", intstart + 1);

if (line.find(")", parstart + 1) != string::npos) {
int parend = line.find(")", parstart + 1);
vector<string> list_parameters;

outFile << "\n/*Function: " << line.substr(intstart, parstart)
<< "\nDescription: \n Description of the function\nParameters:";

findParameters(line, outputFileName,list_parameters);

int counter = 0;

while (counter != list_parameters.size()) {
outFile << list_parameters[counter] << ": Description";
counter++;
}


outFile << "\n Returns:\n returnVal: Description\n*/";

}
}
}

//outputting file line
outFile << "\n" << existingFile[isDone];

isDone++;

}


outFile.close();

读取现有文件

    ifstream inFile;
inFile.open(inputFileName, ios::in);
if (inFile.is_open()){

while (!inFile.eof()){

getline(inFile, line);
existingFile.push_back(line);
}

inFile.close();
}

*这不是我的作业!我将此作为一个副项目来自动将我的名字写在我的作业上,这样我就不必为每项作业都这样做! *

提前致谢!

我试图将标题放在我的问题中以使我的代码整洁,但如果你不喜欢我的问题的格式这里是我所有代码的链接 http://pastebin.com/4P5hFzQm

波纹管是我试图操作的 .cpp(输入文件)

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;


int nDigits(long long number){


int counter;
for (counter = 0; number > 0; counter++){
number = number / 10;

}

return counter;

}

int reverse(long long number){

int reverse = 0;
while (number > 0){

reverse = reverse * 10;
reverse = reverse + (number % 10);
number = number / 10;

}

return reverse;
}

bool isPalindrome(long long number){

if (number == reverse(number)){
return true;
}
else{
return false;
}
}

bool repeatsDigit (long long number){


int temp[1024];
long long fake_number = number;
int counter = 0;
int limit = nDigits(number);


while (fake_number > 0){
temp[counter] = fake_number % 10;

counter++;
fake_number /= 10;
}


for (counter = 0; counter < limit; counter++){

for (int counter2 = 0; counter2 < limit; counter2++){

if (temp[counter] == temp[counter2] && counter != counter2){
return true;
}

}

}

return false;
}

void digitCount( long long n, int& eCount, int& oCount){

int temp[1024];
long long fake_number = n;
int counter = 0;
int limit = nDigits(n);


while (fake_number > 0){
temp[counter] = fake_number % 10;

counter++;
fake_number /= 10;
}


for (counter = 0; counter < limit; counter++){

if (temp[counter] % 2 == 0){
eCount++;
}
else{
oCount++;
}

}


}

int largest(long long n){

int temp[1024];
long long fake_number = n;
int counter = 0;
int limit = nDigits(n);
int largestnum = 0;

while (fake_number > 0){
temp[counter] = fake_number % 10;

counter++;
fake_number /= 10;
}


for (counter = 0; counter < limit; counter++){

if (largestnum < temp[counter]){
largestnum = temp[counter];
}

}
return largestnum;
}
int smallest(long long n){

int temp[1024];
long long fake_number = n;
int counter = 0;
int limit = nDigits(n);
int smallestnum = 10;

while (fake_number > 0){
temp[counter] = fake_number % 10;

counter++;
fake_number /= 10;
}


for (counter = 0; counter < limit; counter++){

if (smallestnum > temp[counter]){
smallestnum = temp[counter];
}

}

return smallestnum;
}
double average(long long n){

int temp[1024];
long long fake_number = n;
int counter = 0;
int limit = nDigits(n);
double averagenum = 0;

while (fake_number > 0){
temp[counter] = fake_number % 10;

counter++;
fake_number /= 10;
}


for (counter = 0; counter < limit; counter++){

averagenum += temp[counter];

}

return averagenum/nDigits(n);
}


int main(){

long long something = 12345;
int evenCount = 0;
int oddCount = 0;



/*real output*/
ifstream file;
file.open("integers.dat",ios::in);
if (file.is_open()){
file >> something;
cout << "The number of digits in " << something << " is " << nDigits(something) << "\n";

file >> something;
cout << "The reverse of : " << something << " is " << reverse(something) << "\n";

file >> something;
if (isPalindrome(something) == 1){
cout << "There is a Palindrome in number: " << something << "\n";
}
else{
cout << something << " is NOT a Palindrome" << "\n";

}

file >> something;
if (repeatsDigit(something) == 1){
cout << "There are repeat digits in " << something << "\n";
}
else{
cout << "There are NOT repeat digits: in " << something << "\n";

}
file >> something;
digitCount(something, evenCount, oddCount);
cout << "There are " << evenCount <<" Even and, " << oddCount <<" Odd in the number " << something << "\n";

file >> something;
cout << "The largest Number in " << something << " is " << largest(something) << "\n";

file >> something;
cout << "The smallest Number in " << something << " is " << smallest(something) << "\n";

file >> something;
cout << "The average Number in " << something << " is " << fixed << setprecision(1) << average(something) << "\n";

}
else {
cout << "File did not open";
}

return 0;
}

此外,输出文件是程序正在命名的新文件,因此可以随意命名...这并不重要

再次感谢您,如果您有任何问题,请提出!我正在尝试尽可能多地学习,这个网站也在帮助我做到这一点!

最佳答案

我无法理解你的代码,但它看起来并没有对 vector 做太多事情,它只是存储它。如果我没记错的话,你可以像下面的代码一样让你的程序更短。

然而,要正确识别函数,您确实需要将线存储在 vector 中以检查它。

int main() 
{
const char* note = "Etcetera Etcetera";

ifstream in("in.cpp");
ofstream out("out.cpp");

string line;
while (getline(in, line))
{
if (
(
line.find('(') != string::npos &&
line.find(')') != string::npos
)
&&
(
line.find("double") == 0 ||
line.find("int") == 0 ||
line.find("bool") == 0 ||
line.find("void") == 0
)
)
{
out << note << endl;
}

out << line << endl;
}

system("pause");
return 0;
}

关于c++ - 文件输出为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33294187/

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