C ++将String值传递给Implementation文件

时间:2018-01-20 03:06:55

标签: c++ string class

有家庭作业的麻烦。 C ++不是我最好的语言,我在课堂上苦苦挣扎,尤其是课堂的概念。我想我大部分时间都在编写代码,但是我很难将字符串romanString2从主文件传递给实现文件,因此它达到了无效的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;
};

2 个答案:

答案 0 :(得分:0)

我注意到一个错误:

您正在使用

void romanType::romanToPositiveInteger() {

    int numResult;
    string romanString;
    numResult = 0;

并继续假设romanString包含罗马数字的字符串表示。

该信息存储在成员变量romanNum中。在函数中更改romanString的{​​{1}}用法,并完全删除变量romanNum

答案 1 :(得分:0)

您将字符串存储在变量romanNum中,但在romanToPositive函数中,您使用的是本地字符串变量romanString而不是romanNum变量。这就是你没有看到所需输出的原因