字符串因未知原因而搞砸
String gets messed up for unknown reason
我试图制作一个程序将罗马数字转换为阿拉伯数字,但由于某种原因,当他进入函数setNumeri时,输入文本甚至在到达转换部分之前就被搞砸了。
问题是函数setNumeri,你可以忽略其他所有内容,因为我粘贴了所有内容以确保不会遗漏任何东西。
对于某些变量是意大利语的事实,我深表歉意,但它应该非常简单。
代码如下:
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
class IX{
public:
void setNumeri(string rom);
void setArabo();
int getArabo();
private:
int length;
int Arabo;
int Numeri[];
};
void IX::setNumeri(string rom){
length = rom.length();
for(int i = length - 1; i >= 0; i--) {
cout << rom.at(i) << endl;
switch (rom.at(i)){
case 'I':
Numeri[i] = 1;
break;
case 'V':
Numeri[i] = 5;
break;
case 'X':
Numeri[i] = 10;
break;
case 'L':
Numeri[i] = 50;
break;
case 'C':
Numeri[i] = 100;
break;
case 'D':
Numeri[i] = 500;
break;
case 'M':
Numeri[i] = 1000;
break;
}
}
}
void IX::setArabo(){
int counter = Numeri[length];
for(int i = length - 1; i >= 0; i--){
if(Numeri[i] == 0) {
counter = counter + Numeri[i];
} else if(Numeri[i] > Numeri[i-1]) {
counter = counter - Numeri[i-1];
i--;
} else if(Numeri[i] <= Numeri[i-1]) {
counter = counter + Numeri[i-1];
}
}
Arabo = counter;
}
int IX::getArabo(){
return Arabo;
}
int main(){
IX lol;
string hellothere;
cout << "Roman numeral:" << endl << endl;
cin >> hellothere;
lol.setNumeri(hellothere);
cout << lol.getArabo() << endl;
return 0;
}
当我输入XIII时,输出是:
I
I
□
-107362937
最后一个不祥的数字是转换的结果,而前 3 个字符(一个在操作中丢失,一个根本无法识别)是 string.at() 的输出,如您所见,它在正确处理字符串字符方面做得非常出色。尝试改用字符串[],但没有成功。
更奇怪的是,一旦我删除了整个开关大小写 string.at() 得到正确的字符串,看起来字符串在开关部分以某种方式搞砸了。使用 if 语句而不是开关也会发生同样的情况。
提前谢谢。
尝试按照代码运行良好。
#include <cstdlib>
#include <string>
using namespace std;
class IX{
public:
void setNumeri(string rom);
int getArabo();
private:
int length;
int Numeri[100];
};
void IX::setNumeri(string rom){
length = rom.length();
for (int i = 0; i < 100; i++)
{
Numeri[i]=-1;
}
for(int i = length - 1; i >= 0; i--) {
cout << rom.at(i) << endl;
switch (rom.at(i)){
case 'I':
Numeri[i] = 1;
break;
case 'V':
Numeri[i] = 5;
break;
case 'X':
Numeri[i] = 10;
break;
case 'L':
Numeri[i] = 50;
break;
case 'C':
Numeri[i] = 100;
break;
case 'D':
Numeri[i] = 500;
break;
case 'M':
Numeri[i] = 1000;
break;
}
}
}
int IX::getArabo(){
int sum=0;
for (int i = 0; i < 100; i++)
{
if (Numeri[i]==-1)
{
return sum;
}
else
{
sum+=Numeri[i];
}
}
}
int main(){
IX lol;
string hellothere;
cout << "Roman numeral:" << endl << endl;
cin >> hellothere;
lol.setNumeri(hellothere);
cout << lol.getArabo() << endl;
return 0;
}
相关文章:
- 输入中的字符串数未知(以字母表示)
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何使用指针将未知长度C++字符串封送到 C#?
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 使用 ReadProcessMemory() 将未知大小的字符数组或字符串读入 wstring 中
- 字符串因未知原因而搞砸
- c++正在将未知结构转换为字符串
- 我有这个单码字符串"Param�tres",è被转换为未知字符。
- 尝试将未知数量的字符串推送到向量中,但我的 cin 循环没有终止
- variadic宏可从未知参数集合中生成字符串向量
- 字符串流到具有未知分隔符的变量
- 当我将字符添加到空字符串(如 " " + c)时,为什么要返回未知值?
- C++将int转换为具有未知基的字符串的简单方法
- 如何在C++中读取未知大小的字符串
- 读取长度未知的键入字符串
- 使用字符串时,C++未知重写说明符
- 从C#调用的C++中,返回一个长度先验未知的字符串
- 将字符串中的元素与字符进行比较时出现未知错误
- 在输入过程中,将字符串存储在大小未知的向量中
- 将字符串添加到未知大小的数组c++中