-2

I writed program to convert a number of cell and row to excel data. Here is code:

#include <cstdlib>
#include <iostream>
using namespace std;
char dgt[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int input = 10;
int output = 26;
int main() {
char name[64];
std::cin.getline(name, 64);
string text = name;
char* temp;
int spacja = text.find(' ');
long liczba = strtol(text.substr(spacja+1,text.size()).c_str(), &temp, input);
string out = "";
liczba--;
for (int i = 32; true; i--) {
    out = dgt[liczba % output - (i==32?0:1)] + out;
    liczba = liczba / output;
    if (liczba <= 0)
        break;
}
cout  <<  out << text.substr(0,spacja);
return 0;
}

I got 90/100, in one test it's return bad value. Where is error? I cannot check it.

4

2 回答 2

2

首先,没有理由dgt将其声明为 C 风格的字符数组:

std::string dgt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

其次,您应该使用std::getline而不是cin.getline

std::string line;
std::getline(cin, line);

第三,您应该使用std::stol代替strtol

std::string s = "123";
long liczba = std::stol(s);

您现在看到的问题是由于您已声明

char* temp; // an uninitialized pointer

然后你尝试使用它

long liczba = strtol(text.substr(spacja+1,text.size()).c_str(), &temp, input);
//                                                              ^^^^^ This will result in a runtime error

使用std::stol可以避免这个问题。

要执行 #2 和 #3,您需要包含<string>.

于 2013-10-27T01:34:34.170 回答
0

我使用以下方法解决了这个问题:

#include <cstdlib>
#include <iostream>
using namespace std;
char dgt[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int input = 10;
int output = 26;
string convert(long liczba) {
string out = "";
liczba--;
for (int i = 32; true; i--) {
    char add = dgt[liczba % output - (i==32?0:1)];
    if(add==0) {
        add='Z';
        out =  add + out;
        liczba = liczba / output-1;
    } else {
        out =  add + out;
        liczba = liczba / output;
    }
    if (liczba <= 0)
        break;
}
return out;
}
int main() {
char name[64];
std::cin.getline(name, 64);
string text = name;
char* temp;
int spacja = text.find(' ');
long liczba = strtol(text.substr(spacja+1,text.size()).c_str(), &temp, input);
cout  <<  convert(liczba) << text.substr(0,spacja);
return 0;
}
于 2013-10-27T01:45:46.703 回答