C ++如何在for循环中计算一次而不是多次
C++ how to cout once instead of multiple times in a for loop
void f3(string x){
for (int i=0; i < x.length(); i++){
if ('A'<=x[i] && 'z'>=x[i]){
cout << "English Alphabet" << endl;
}
else {
cout << "NOT English Alphabet" << endl;
break;
}
}
}
如何只得到一个结果(cout)?像 "English Alphabet" 而不是 "abcd" 的 4 次。
示例:
gimme a string:
abcd
English Alphabet
English Alphabet
English
Alphabet
English Alphabet
或
gimme a string:
abc!
English Alphabet
English Alphabet
English
Alphabet
NOT English Alphabet
如果我输入 space,程序将无法运行。
我该如何解决?
感谢您的帮助!
这里有两种解决方案:
使用 bool
变量:
void f3(string x)
{
bool notEnglish = false;
for (int i=0; i < x.length(); i++)
{
if ( ('A' > x[i] || 'z' < x[i]) && x[i] != ' ' )
{
notEnglish = true;
break;
}
}
if (notEnglish) std::cout << "NOT ENGLISH" << std::endl;
else std::cout << "ENGLISH" << std::endl;
}
没有 bool
并且 int
作为 return 值:
int f3(string x)
{
for (int i=0; i < x.length(); i++)
{
if ( ('A' > x[i] || 'z' < x[i]) && x[i] != ' ' )
{
std::cout << "NOT ENGLISH" << std::endl;
return -1;
}
}
std::cout << "ENGLISH" << std::endl;
return 1;
}
我更喜欢第二个,因为您对函数内部发生的事情有反馈(return 值)。
我不确定我是否得到了你想要的,我也不懂 C++,但可以帮助你的是使用布尔值来定义输入中是否包含非英文字符。你会从一开始就把它定义为真,一旦你发现一个字符不是英文字符,你就把它设置为假。当您跳出 for 循环时,您使用 if 来检查您的输入是否只有英文字符。应该是这样的:
void f3(string x) {
bool isEnglish = true;
for (int i=0; i < x.length(); i++){
if ('A'>x[i] || 'z'<x[i]){
isEnglish = false;
break;
}
}
if (isEnglish) {
cout << "English Alphabet" << endl;
} else {
cout << "NOT English Alphabet" << endl;
}
}
如果您输入 space 程序应该 运行 OK,但它总是 return "not english alphabet"。这是因为如果输入的当前字符位于 ASCII 字符 space 的字符 A 和 z 之间,则您正在进行的测试会考虑在内。见下图:
看看space是第32个字符,比'A'小,所以不会进入你的if块,落入else里面,所以returning 'NOT English alphabet'。数字、@ 符号、& 符号以及 'A' 之前的所有内容以及 'z' 之后的所有内容也将无法通过测试。此外,方括号(“[”和“]”)将作为英文字母输入传递。
如果您只想包含字母,您的 if 应如下所示:
if (x[i] < 'A' || (x[i] > 'Z' && x[i] < 'a') || x[i] > 'z')
如果要包含[=36=]s,再添加一个&&:
if ((x[i] < 'A' || (x[i] > 'Z' && x[i] < 'a') || x[i] > 'z') && x[i] != ' ')
可以使用相同的逻辑将任何字符添加到您的验证中。
祝你好运!
由于您已将其标记为 C++,我假设您更喜欢用真正的 C++ 编写的解决方案。
首先,我会查找 std::isalpha
。专门定义一个字符是否为字母1.
其次,我会查找 std::all_of
和 std::any_of
。它们的定义是为了确定集合的 any/all 是否符合特定要求。
把它们放在一起,你可以做这样的事情:
if (!std::all_of(x.begin(), x.end(),
[](unsigned char c) { return std::isalpha(c); })
std::cout << "Not ";
std::cout << "English alphabet\n";
1. 请注意 isalpha
的结果不一定基于英文字母。相反,它基于当前的语言环境,因此(例如)法语语言环境,它会说不仅是 "a" 字母,而且“â”和“à”也是字母(你的测试不会)。同样,对于德语语言环境,它会说“ß”是字母(等等)。默认语言环境被命名为 "C";对于诸如确定某物是否是字母之类的事情,它遵循英文字母表。
您可以声明一个本地布尔变量,以便在检测到非英语语言时立即将循环中断并将该变量设置为 false。
事情比较棘手:检查非英文字符:
void f3(string x){
bool IsEng = true;
for(int i = 0; i < x.length(); i++){
if ( !( x[i] >= 'A' && x[i] <= 'z') ){
IsEng = false;
break;
}
}
if(IsEng)
cout << "English Alphabet" << endl;
else
cout << "Not English Alphabet" << endl;
}
这是一次执行一行代码的非常简单和合乎逻辑的方法:
int x=1
if (x==1)
{
//your cout-code here;
x++;
}
x变成2,下次就不会执行了
void f3(string x){
for (int i=0; i < x.length(); i++){
if ('A'<=x[i] && 'z'>=x[i]){
cout << "English Alphabet" << endl;
}
else {
cout << "NOT English Alphabet" << endl;
break;
}
}
}
如何只得到一个结果(cout)?像 "English Alphabet" 而不是 "abcd" 的 4 次。
示例:
gimme a string:
abcd
English Alphabet
English Alphabet
English Alphabet
English Alphabet
或
gimme a string:
abc!
English Alphabet
English Alphabet
English Alphabet
NOT English Alphabet
如果我输入 space,程序将无法运行。 我该如何解决? 感谢您的帮助!
这里有两种解决方案:
使用 bool
变量:
void f3(string x)
{
bool notEnglish = false;
for (int i=0; i < x.length(); i++)
{
if ( ('A' > x[i] || 'z' < x[i]) && x[i] != ' ' )
{
notEnglish = true;
break;
}
}
if (notEnglish) std::cout << "NOT ENGLISH" << std::endl;
else std::cout << "ENGLISH" << std::endl;
}
没有 bool
并且 int
作为 return 值:
int f3(string x)
{
for (int i=0; i < x.length(); i++)
{
if ( ('A' > x[i] || 'z' < x[i]) && x[i] != ' ' )
{
std::cout << "NOT ENGLISH" << std::endl;
return -1;
}
}
std::cout << "ENGLISH" << std::endl;
return 1;
}
我更喜欢第二个,因为您对函数内部发生的事情有反馈(return 值)。
我不确定我是否得到了你想要的,我也不懂 C++,但可以帮助你的是使用布尔值来定义输入中是否包含非英文字符。你会从一开始就把它定义为真,一旦你发现一个字符不是英文字符,你就把它设置为假。当您跳出 for 循环时,您使用 if 来检查您的输入是否只有英文字符。应该是这样的:
void f3(string x) {
bool isEnglish = true;
for (int i=0; i < x.length(); i++){
if ('A'>x[i] || 'z'<x[i]){
isEnglish = false;
break;
}
}
if (isEnglish) {
cout << "English Alphabet" << endl;
} else {
cout << "NOT English Alphabet" << endl;
}
}
如果您输入 space 程序应该 运行 OK,但它总是 return "not english alphabet"。这是因为如果输入的当前字符位于 ASCII 字符 space 的字符 A 和 z 之间,则您正在进行的测试会考虑在内。见下图:
看看space是第32个字符,比'A'小,所以不会进入你的if块,落入else里面,所以returning 'NOT English alphabet'。数字、@ 符号、& 符号以及 'A' 之前的所有内容以及 'z' 之后的所有内容也将无法通过测试。此外,方括号(“[”和“]”)将作为英文字母输入传递。
如果您只想包含字母,您的 if 应如下所示:
if (x[i] < 'A' || (x[i] > 'Z' && x[i] < 'a') || x[i] > 'z')
如果要包含[=36=]s,再添加一个&&:
if ((x[i] < 'A' || (x[i] > 'Z' && x[i] < 'a') || x[i] > 'z') && x[i] != ' ')
可以使用相同的逻辑将任何字符添加到您的验证中。
祝你好运!
由于您已将其标记为 C++,我假设您更喜欢用真正的 C++ 编写的解决方案。
首先,我会查找 std::isalpha
。专门定义一个字符是否为字母1.
其次,我会查找 std::all_of
和 std::any_of
。它们的定义是为了确定集合的 any/all 是否符合特定要求。
把它们放在一起,你可以做这样的事情:
if (!std::all_of(x.begin(), x.end(),
[](unsigned char c) { return std::isalpha(c); })
std::cout << "Not ";
std::cout << "English alphabet\n";
1. 请注意 isalpha
的结果不一定基于英文字母。相反,它基于当前的语言环境,因此(例如)法语语言环境,它会说不仅是 "a" 字母,而且“â”和“à”也是字母(你的测试不会)。同样,对于德语语言环境,它会说“ß”是字母(等等)。默认语言环境被命名为 "C";对于诸如确定某物是否是字母之类的事情,它遵循英文字母表。
您可以声明一个本地布尔变量,以便在检测到非英语语言时立即将循环中断并将该变量设置为 false。
事情比较棘手:检查非英文字符:
void f3(string x){
bool IsEng = true;
for(int i = 0; i < x.length(); i++){
if ( !( x[i] >= 'A' && x[i] <= 'z') ){
IsEng = false;
break;
}
}
if(IsEng)
cout << "English Alphabet" << endl;
else
cout << "Not English Alphabet" << endl;
}
这是一次执行一行代码的非常简单和合乎逻辑的方法:
int x=1
if (x==1)
{
//your cout-code here;
x++;
}
x变成2,下次就不会执行了