0

我写了一个小数独程序,我想这样做,所以每次你按下某个按钮时,该按钮上的文本是前一个数字加一。

因此,例如,我有一个显示“1”的大按钮,然后单击它,如果再次单击它,它将显示“2”然后显示“3”,依此类推,直到“9”。

起初我认为这很简单,我用这段代码调用了一个计数为 9 的整数,一个等于按钮文本的字符串,然后我尝试将 int 转换为字符串,但失败了,它给了我下面的错误。这是代码:

int s = 0;
String^ mystr = a0->Text;
std::stringstream out;
out << s;
s = out.str(); //this is the error apparently.
s++;

这是错误:

错误 C2440:“=”:无法从“std::basic_string<_Elem,_Traits,_Ax>”转换为“int”

我尝试在 MSDN 上搜索该错误,但它与我的不同,而且我离开页面时比输入时更加混乱。

另外作为参考,我在 Windows XP 和 Visual Studio 2010 C++ 中使用 Windows 窗体应用程序。

4

4 回答 4

3

如果您想使用 转换或std::stringto char*,它可能如下所示:intstd::stringstream

int s = 0;
std::string myStr("7");
std::stringstream out;
out << myStr;
out >> s;

或者您可以stringstream直接使用myStrwhich 生成相同的结果来构造它:

std::stringstream out(myStr);
out >> s;

如果您想转换System::String^std::string,它可能如下所示:

#include <msclr\marshal_cppstd.h>
...
System::String^ clrString = "7";
std::string myStr = msclr::interop::marshal_as<std::string>(clrString);

尽管正如Ben Voigt指出的那样:当您从 . 开始时System::String^,您应该使用 .NET Framework 中的某些函数来转换它。它也可能看起来像这样:

System::String^ clrString = "7";
int i = System::Int32::Parse(clrString);
于 2012-04-20T16:28:14.030 回答
2

由于您从 开始String^,因此您需要以下内容:

int i;
if (System::Int32::TryParse(a0->Text, i)) {
    ++i;
    a0->Text = i.ToString();
}
于 2012-04-20T21:57:40.727 回答
0

s 是类型intstr()返回一个string。您不能将字符串分配给 int。使用不同的变量来存储字符串。

这是一些可能的代码(尽管它不会编译)

string text = GetButtonText(); //get button text
stringstream ss (text); //create stringstream based on that
int s; 
ss >> s; //format string as int and store into s
++s; //increment
ss << s; //store back into stringstream
text = ss.str(); //get string of that
SetButtonText (text); //set button text to the string
于 2012-04-20T16:21:17.853 回答
0

在 C++ 中有很多方法可以将字符串转换为 int ——现代习惯用法可能是安装 boost 库并使用 boost::lexical_cast。

但是,您的问题表明您对 C++ 没有很好的掌握。如果您的目的是学习更多关于 C++ 的知识,那么在尝试像数独这样复杂的东西之前,您可能想尝试许多更简单的教程之一。

如果您只想使用 Windows 窗体构建数独,我建议您放弃 C++ 并查看 C# 或 VB.Net,对于没有经验的程序员来说,它们的陷阱要少得多。

于 2012-04-20T16:30:06.680 回答