我有程序参数,要求我有一个格式化的字符串,其中包含在程序执行过程中输入的变量值。由于涉及的数据量大,因此每个新数据点的换行都是理想的。
我正在使用Visual Studio的C ++编译器,并且已经具有以下标头:
//preprocessors
#include <iostream>
#include "MortCalc.h"
#include <string>
#include <istream>
#include <ctime>
#include <cmath>
#include <iomanip>
#include <vector>
using namespace std;
我试图将值和字符串片段连接起来,像这样:
//write info to string
string mortgageInfo =
" Principal Of Loan: $" + mortData.principal + "\n"
+ " Interest Rate: " + mortData.interest + "%\n"
+ " Monthly Payment: $" + monthlyPayment + "\n"
+ " Total Loan Paid: $" + total + "\n"
+ " Total Interest Paid: $" + interestOverLife + "\n"
+ setprecision(0) + fixed + "\n"
+ " Years: " + mortData.term + "\n"
+ " Start Date of Loan: " + mortData.dayStart + "/"
+ mortData.monStart + "/" + mortData.yearStart + "\n"
+ " End Date of Loan: " + mortData.dayEnd + "/"
+ mortData.monEnd + "/" + mortData.yearEnd + "\n";
但我不断收到此错误:“表达式必须具有整数或无作用域的枚举类型”。
我将这种格式基于cout语句的工作原理,并将所有'<<'替换为'+'进行连接,而不是双重胡萝卜所代表的'next statement'。
我走对了吗?缺少明显的东西吗?可以做到吗?
答案 0 :(得分:2)
进行字符串连接时,不能使用setPrecision
和fixed
修饰符。
您可以使用std::stringstream
来做到这一点:
// In the header
#include <sstream>
// In your function
std::stringstream ss;
ss << " Principal Of Loan: $" << mortData.principal << '\n';
ss << " Interest Rate: " + mortData.interest + "%\n";
// more lines...
string mortgageInfo = ss.str();
答案 1 :(得分:1)
您正在做的事情与您认为的事情 ...
略有不同代码行正在使用operator+()
derivative of the std::string
class ...并且很遗憾它不允许在内部使用整数或任何其他非字符串值
您,但是有两个选择:
std::to_string()
示例:(不干净!)
#include <string>
int main() {
some_function_that_uses_only_strings("ABC" + std::to_string(number));
}
std::stringstream
和std::cout
,它本身就是std::istream
,因此它的语法是相同的,在语法和问题上都看起来是更好的方法... 示例:
#include <sstream>
int main() {
std::stringstream some_stream;
some_stream << first_number << "ABC" << number << std::endl;
some_function_that_uses_only_strings(some_str.str());
}
答案 2 :(得分:0)
字符串文字(“ ...”)的类型为const char *,而不是std :: string,它们的operator +不是串联的,而是添加到指向内存的地址中。
要么使用“ ...”来实际创建std :: string文字(但是std :: fixed等仍然无法正常工作)或创建
std::stringstream out;
然后使用运算符<<,就像您习惯使用std :: cout一样。 要从字符串流中取出字符串,请使用.str()成员函数。