-2

多数のセルと行をExcelデータに変換するプログラムを作成しました。コードは次のとおりです。

#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;
}

私は 90/100 を得ました。あるテストでは、悪い値が返されました。エラーはどこですか?確認できません。

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 に答える