文件输出为十六进制
File output to hexadecimal?
我正在编写一个程序,它将添加一个注释,其中包含我的姓名、日期、文件名称和它的功能描述。它还查找任何int
和void
函数,这些函数添加了对每个函数的功能的描述。我已经完成了这些步骤!
我创建了一个vector<string>
,它将整个文件读取到自己。然后它搜索在向量内的任何void
或int
函数。如果它找到一个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行。
我不知道发生了什么,所以任何帮助都会非常感激!我想这可能是向量中有多少条线的限制?
我的代码
发现参数函数
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 "";
}
头输出函数
//Starting Header
//File Name
outFile << "/* nFilename: " << outputFileName;
//Date
char date[9];
_strdate_s(date);
outFile << "nnDate: " << date << "n";
//Description
outFile << "nProgrammer: DyrenexnnDescription: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 << "nn */ nn";
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 functionnParameters:" <<
"n Parameters heren 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 functionnParameters:";
findParameters(line, outputFileName,list_parameters);
int counter = 0;
while (counter != list_parameters.size()) {
outFile << list_parameters[counter] << ": Description";
counter++;
}
outFile << "n Returns:n returnVal: Descriptionn*/";
}
}
}
//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中存储行来检查它。
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;
}
- 字符数组到十六进制字符串的转换 - 意外输出
- 在视觉工作室中以十六进制进行位移位并通过 cout 输出
- 为什么将字符串输出到未命名的 std::ofstream 反而给了我一个十六进制数?
- 重载输出运算符给出十六进制数字而不是字符串
- 为什么打印字符串阵列输出十六进制
- 如何在C++中从十六进制字符串输出 Unicode 字符
- std::dec仍然将内存地址输出为十六进制
- 无法在C++中输出十六进制
- 十六进制字符到十进制,并将输出存储为字符
- 为什么此输出看起来不确定?(是十六进制文字的冲刺、printf 还是语法?
- 为什么 int -> 十六进制/oct/bin 的转换在输出中打印为纯十进制值?
- 使用十六进制保存输出会增加空格
- 为什么我必须将一个字节强制转换为无符号两次才能看到十六进制输出
- printf十六进制值输出似乎比应该的要大
- C++:十六进制到十进制的转换函数-没有得到正确的输出
- 读取十六进制文件会产生错误的输出(跳过一些十六进制值)
- C++输入字节和输出十六进制
- 试图输出命令行参数会产生一个看似随机的十六进制数
- 以十六进制表示法(0xABCDEF)将字节缓冲区的字节输出到控制台输出流
- 在c++中将十六进制输出转换为十进制