对于我的家庭作业项目,我希望创建一个程序,询问用户他们最喜欢的城市以及他们想要显示哪个字符。用户输入一个数字,代表该字符在他们想要显示的城市中的位置,并且该程序应该在该位置显示字母。
我们尚未学习如何从字符串中提取字符,但是项目的这一部分应该表明我们可以通过Google适当地找到编码解决方案。我发现了一个void函数,它将为我从特定位置提取字符,但是在如何使用它方面完全迷失了。我尝试了几种不同的方法,并以各种可能的方式键入了我可能想到的实现此功能的方法,但该方法没有起作用。
我尝试完全照原样复制在网上找到的示例代码(在此地址找到第一个示例:https://www.geeksforgeeks.org/string-at-in-cpp/),但即使该示例也无法在Visual Studio 2017中运行。
#include <iostream>
#include <string>
using namespace std;
void at(string);
int main()
{
//variables for favorite city & display character
string favCity;
int dispChar;
//asking user for favorite city
cout << "Input your favorite city: ";
cin >> favCity;
cout << "Which character would you like to display: ";
cin >> dispChar;
cout << endl << endl;
cout << "The user entered: " << favCity << endl;
cout << "The character at position " << dispChar << " is: " << at();
}
预期结果是计算机将显示“位置(dispChar)处的字符是:(无论字母在用户输入位置dispChar处)”
EX:"The character at position 2 is: e
//如果用户输入了底特律城市
我收到错误消息at
未定义,当我尝试使用str.at();
时会得到str
未定义,等等。
答案 0 :(得分:1)
不需要使用外部函数通过字符串的索引从字符串中提取字符。 std::string
本身实现了import 'package:flutter/material.dart';
class LoginForm extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _LoginFormState();
}
}
class _LoginFormState extends State<LoginForm> {
TextStyle style = TextStyle(fontFamily: 'Montserrat', fontSize: 20.0);
OutlineInputBorder textFieldBorder = OutlineInputBorder(
borderRadius: BorderRadius.circular(32.0),
borderSide: BorderSide(color: const Color(0xff01d277)));
final formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
/// Username field
final usernameField = TextFormField(
obscureText: false,
style: style,
validator: (value) {
if (value.isEmpty) return 'Please enter username';
return null;
},
decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
hintText: 'Username',
border: textFieldBorder,
));
/// Password field
final passwordField = TextFormField(
obscureText: true,
style: style,
validator: (value) {
if (value.isEmpty) return 'Please enter password';
return null;
},
decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
hintText: 'Password',
border: textFieldBorder,
));
/// Login button
final loginButton = Material(
elevation: 5.0,
borderRadius: BorderRadius.circular(30.0),
color: Color(0xff01d277),
child: MaterialButton(
minWidth: MediaQuery.of(context).size.width,
padding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
onPressed: () {
if (formKey.currentState.validate())
Scaffold.of(context).showSnackBar(SnackBar(content: Text('Done!')));
},
child: Text("Login",
textAlign: TextAlign.center,
style: style.copyWith(
color: Colors.white, fontWeight: FontWeight.bold)),
),
);
return Padding(
padding: const EdgeInsets.all(36.0),
child: Form(
key: formKey,
child: Column(
children: <Widget>[
SizedBox(
height: 150,
child: Image.asset(
'lib/assets/images/logo_dark.png',
fit: BoxFit.contain,
),
),
SizedBox(height: 45.0),
usernameField,
SizedBox(
height: 45.0,
),
passwordField,
SizedBox(
height: 45.0,
),
loginButton,
],
)));
}
}
函数,并且还重载了std::string::at
运算符。
有两种方法可以做到这一点:
1。
[]
2。
cout << "The character at position " << dispChar << " is: " << favCity.at(dispChar);
答案 1 :(得分:0)
std :: string :: at可用于从给定字符串中按字符提取字符。
char& string::at (size_type idx)
string :: at函数返回特定位置(idx)处的字符。您可以直接在包含类的情况下使用string :: at。Learn More Here
因此,在您的解决方案中,您声明了void at(string);
,因此您也需要对其进行定义。
我认为您应该对您的代码进行一些更改。
#include <string>
using namespace std;
void extract_char(string str, int pos)
{
cout<<str.at(pos);
}
int main(void)
{
int dispChar;
string favCity;
cout<<"Input your favorite city: ";
cin>>favCity;
cout<<"Which position would you like to extract the character from(0 to size of city): ";
cin>>dispChar;
cout<<endl<<endl;
cout<<"The user entered: "<<favCity<<endl;
extract_char(favCity, dispChar-1);
/*
OR
cout<<"The character at position "<<dispChar<<" is: "<<favCity.at(dispChar-1);
*/
return 0;
}
答案 2 :(得分:0)
项目的这一部分应该表明我们可以通过Google适当地找到编码解决方案。
我可以建议搜索短语“ C ++参考”吗?寻找良好的一般参考可以节省您将来的时间。将您最喜欢的参考文献添加为书签,并在将来使用其主题列表代替互联网搜索。 (在这种情况下,您将直接跳到文档中查找字符串并扫描可用的方法。)