将字符串值传递给实现文件的 C++ 问题
Posted
技术标签:
【中文标题】将字符串值传递给实现文件的 C++ 问题【英文标题】:C++ Issue passing String value to Implementation file 【发布时间】:2018-01-20 03:06:54 【问题描述】:家庭作业有问题。 C++ 不是我最好的语言,我在课堂上苦苦挣扎,尤其是在课堂的概念上。我想我大部分时间已经完成了分配的代码,但是我在将字符串 romanString2 从主文件传递到实现文件时遇到了困难,因此它达到了 void romanType::romanToPositiveInteger() 。以下是我当前的代码。我会很感激帮助指出什么是错的。
main.cpp //主程序
#include <iostream>
#include <string>
#include "roman.h"
using namespace std;
int main()
romanType roman;
string romanString2;
cout << "Enter a roman number: ";
cin >> romanString2;
cout << endl;
roman.setRoman(romanString2);
cout << "The equivalent of the Roman numeral "
<< romanString2 << " is ";
roman.printPositiveInteger();
// cout << numResult;
cout << endl;
return 0;
roman.cpp //罗马数字实现文件
#include <iostream>
#include <string>
#include "roman.h"
using namespace std;
// part c
void romanType::printPositiveInteger() const
cout << num;
// part c
void romanType::printRoman() const
cout << romanNum;
// part a
void romanType::setRoman(string rString)
romanNum = rString;
romanToPositiveInteger();
// part b
void romanType::romanToPositiveInteger()
int numResult;
string romanString;
numResult = 0;
cout << romanString;
if (romanString.find("MMM") != std::string::npos)
numResult = numResult + 3000;
else if (romanString.find("MM") != std::string::npos)
numResult = numResult + 2000;
else if (romanString.find("M") != std::string::npos and romanString.find("CM") == std::string::npos)
numResult = numResult + 1000;
else
if (romanString.find("CM") != std::string::npos)
numResult = numResult + 900;
cout << "CM";
if (romanString.find("D") != std::string::npos and romanString.find("CD") == std::string::npos)
numResult = numResult + 500;
if (romanString.find("CD") != std::string::npos)
numResult = numResult + 400;
if (romanString.find("C") != std::string::npos and romanString.find("CD") == std::string::npos and romanString.find("CC") == std::string::npos and romanString.find("CCC") == std::string::npos and romanString.find("CM") == std::string::npos )
numResult = numResult + 100;
if (romanString.find("CCC") != std::string::npos)
numResult = numResult + 300;
else if (romanString.find("CC") != std::string::npos)
numResult = numResult + 200;
if (romanString.find("L") != std::string::npos and romanString.find("LC") == std::string::npos)
numResult = numResult + 50;
if(romanString.find("XL") != std::string::npos)
numResult = numResult + 40;
if (romanString.find("XXX") != std::string::npos)
numResult = numResult + 30;
else if (romanString.find("XX") != std::string::npos)
numResult = numResult + 20;
else if (romanString.find("X") != std::string::npos and romanString.find("IX") == std::string::npos)
numResult = numResult + 10;
else
if (romanString.find("IX") != std::string::npos)
numResult = numResult + 9;
if (romanString.find("V") != std::string::npos and romanString.find("IV") == std::string::npos )
numResult = numResult + 5;
if (romanString.find("III") != std::string::npos)
numResult = numResult + 3;
else if (romanString.find("II") != std::string::npos)
numResult = numResult + 2;
else if (romanString.find("I") != std::string::npos and romanString.find("IV") == std::string::npos)
numResult = numResult + 1;
else
if (romanString.find("IV") != std::string::npos)
numResult = numResult + 4;
cout << numResult;
num = numResult;
romanType::romanType()
romanNum ='I';
num='1';
romanType::romanType(string rString)
romanNum = rString;
romanToPositiveInteger();
roman.h
#include <string>
using namespace std;
class romanType
public:
void setRoman(string);
void romanToPositiveInteger();
void printPositiveInteger() const;
void printRoman() const;
romanType();
romanType(string);
private:
string romanNum;
int num;
;
【问题讨论】:
【参考方案1】:我注意到一个错误:
你正在使用
void romanType::romanToPositiveInteger()
int numResult;
string romanString;
numResult = 0;
并继续假设romanString
包含罗马数字的字符串表示。
该信息存储在成员变量romanNum
中。在函数中将romanString
的用法改为romanNum
,并完全删除变量romanString
。
【讨论】:
谢谢,我现在可以使用了。我觉得这是显而易见的事情,但我对此感到非常沮丧,即使它开始闪烁红色,我也可能不会注意到错误。【参考方案2】:您将字符串存储在变量 romanNum 中,但在 romanToPositive 函数中,您使用的是本地字符串变量 romanString 而不是 romanNum 变量。这就是您没有看到所需输出的原因
【讨论】:
以上是关于将字符串值传递给实现文件的 C++ 问题的主要内容,如果未能解决你的问题,请参考以下文章
将 javascript 字符串传递给 std::string 打印垃圾值
如何将字符串从 Python3 传递给 cythonized C++ 函数
将 C# 字符串传递给 C++,并将 C++ 结果(字符串、char*.. 任何)传递给 C#