您好我试图检查字符串是否包含至少一个字母,但在此阶段不起作用。如果我键入13,它会继续而不会给我错误, 如果包含数字我只想要至少一个字母,那就没关系了:Patrick1没关系。
这是我尝试的代码:
public T NewRequest<T>(HttpWebRequest request)
{
T parsedResult = default(T);
string responseData = null;
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.Cookies.ExtractCookieInformation().Count > 0)
{
SaveCookiesToListFrom(response);
}
else
{
response.TryFixCookiesFrom(request);
SaveCookiesToListFrom(response);
}
responseData = GetContentFrom(response);
}
}
catch (WebException wex)
{
var pageContent = new StreamReader(wex.Response.GetResponseStream())
.ReadToEnd();
Console.WriteLine(pageContent);
}
catch (Exception e)
{
Console.WriteLine(e);
}
parsedResult = JsonConvert.DeserializeObject<T>(responseData);
return parsedResult;
}
任何建议都要感谢你们!
答案 0 :(得分:5)
C ++标准库有many nice algorithmic functions,例如一个名为std::any_of
的文件,如果传递给的范围中的任何元素导致谓词返回true
,它将返回true
。
可以像这样使用::isalpha
if (std::any_of(std::begin(b), std::end(b), ::isalpha))
{
// There is at least one alphabetic character in the string
}
重要说明: {+ 1}}函数是在C ++ 11中引入的。有些编译器需要特殊的标志来启用C ++ 11。很老的编译器和标准库可能根本没有这个功能。
答案 1 :(得分:0)
请尽量避免重复自己(就像你使用“getline”一样)
如果必须,请重新考虑您的算法...在您的情况下,它可能类似于“在没有输入正确名称的情况下重复输入”,这可以用这种方式编码:
这样,如果你想改变A中的代码,你也不能忘记将它改为B(以及你最终将其复制到的所有其他地方); - )
#include <algorithm>
#include <iostream>
#include <cctype>
void setName(std::string& b) {
bool isValidName=false; // nothing entered yet
while ( !isValidName )
{
std::cout << "Please enter your name:" << std::endl;
std::getline(std::cin, b);
if (std::any_of(std::begin(b), std::end(b), ::isalpha)) {
isValidName=true; // correct name entered
}
else {
std::cout << "Error" << std::endl;
}
}
}
int main() {
std::string name;
setName(name);
std::cout << "Hello, " << name << "!" << std::endl;
return 0;
}