C(扫描频率)中的区分大小写(如果/其他)
我脚本的这一部分工作正常,除了输入“blue”完成if语句,但输入“blue”被认为是其他语句。我很难用| |来表示“蓝色”或“蓝色”是可以接受的。如果有人能提供一些指导,我们将不胜感激。我刚开始学CC(扫描频率)中的区分大小写(如果/其他),c,if-statement,scanf,string-comparison,case-sensitive,C,If Statement,Scanf,String Comparison,Case Sensitive,我脚本的这一部分工作正常,除了输入“blue”完成if语句,但输入“blue”被认为是其他语句。我很难用| |来表示“蓝色”或“蓝色”是可以接受的。如果有人能提供一些指导,我们将不胜感激。我刚开始学C printf("What is your favorite color?\n"); scanf("%s", &color); if (strcmp(color, "blue") == 0) { printf("Your favorite color is %s. Me too!\n\n
printf("What is your favorite color?\n");
scanf("%s", &color);
if (strcmp(color, "blue") == 0) {
printf("Your favorite color is %s. Me too!\n\n", color);
} else {
printf("Your favorite color is %s. That is cool. My favorite color is blue.\n\n", color);
}
全文如下:
#include <stdio.h>
#include <string.h>
int main(void)
{
char first [20];
char last [20];
char color [20];
int n;
printf("Please input your first name: ");
scanf("%s", &first);
printf("Please input your last name: ");
scanf("%s", &last);
printf("Your name is %s %s.\n\n", first,last);
printf("What is your favorite color?\n");
scanf("%s", &color);
if (strcmp(color, "blue") == 0) {
printf("Your favorite color is %s. Me too!\n\n", color);
}
else {
printf("Your favorite color is %s. That is cool. My favorite color is blue.\n\n", color);
}
printf("I am thinking of a number between 1 and 100. Can you guess it?\n");
scanf("%d", &n);
if (n == 54) {
printf("The number is 54! That is correct!\n\n", n);
}
else {
printf("Wrong the number is not %d. The number was 54.\n\n", n);
}
printf("Your name is %s %s. Your favorite color is %s. You guessed the number %d.\n\n", first,last,color,n);
return(0);
}
#包括
#包括
内部主(空)
{
字符优先[20];
最后一个字符[20];
炭色[20];
int n;
printf(“请输入您的名字:”);
scanf(“%s”,第一个(&F);
printf(“请输入您的姓氏:”);
scanf(“%s”,最后一个(&L);
printf(“您的名字是%s%s。\n\n”,第一个,最后一个);
printf(“您最喜欢的颜色是什么?\n”);
扫描频率(“%s”和颜色);
如果(strcmp(颜色,“蓝色”)==0){
printf(“您最喜欢的颜色是%s。我也是!\n\n”,颜色);
}
否则{
printf(“您最喜欢的颜色是%s。这很酷。我最喜欢的颜色是蓝色。\n\n”,color);
}
printf(“我想的是一个介于1和100之间的数字。你能猜出来吗?\n”);
scanf(“%d”和“&n”);
如果(n==54){
printf(“数字是54!正确!\n\n”,n);
}
否则{
printf(“错误,号码不是%d。号码是54。\n\n”,n);
}
printf(“您的名字是%s%s。您最喜欢的颜色是%s。您猜到了数字%d。\n\n”,第一个,最后一个,颜色,n);
返回(0);
}
直接使用|
来接受这两个选项
if (strcmp(color, "blue") == 0 || strcmp(color, "Blue") == 0)
只需直接使用
|
即可接受这两者
if (strcmp(color, "blue") == 0 || strcmp(color, "Blue") == 0)
如您所注意到的,是区分大小写的。您可以使用逻辑或| |
使代码与其他输入格式一起工作。例如:
if ((strcmp(color, "blue") == 0) || (strcmp(color, "Blue") == 0))
但这是相当乏味的编写和将不工作的输入“蓝色”
如果在基于Unix的系统上,则可以使用进行不区分大小写的比较。不幸的是,这个函数不是标准的。在Windows上,一个等价物是 正如您所注意到的,是区分大小写的。您可以使用逻辑或| |
使代码与其他输入格式一起工作。例如:
if ((strcmp(color, "blue") == 0) || (strcmp(color, "Blue") == 0))
但这是相当乏味的编写和将不工作的输入“蓝色”
如果在基于Unix的系统上,则可以使用进行不区分大小写的比较。不幸的是,这个函数不是标准的。在Windows上,一个等价物是 如果您不想依赖特定于平台的标题,可以非常轻松地将整个输入字符串转换为小写:
void lower_string(char *str) {
for (char *p = str; *p != '\0'; ++p) {
*p = tolower(*p);
}
}
然后
lower_string(color);
或者进行自己的不区分大小写的比较
int strcmp_insensitive(const char *str1, const char *str2) {
for (; *str1 && *str2; ++str1, ++str2) {
if (tolower(*str1) > tolower(*str2)) return 1;
if (tolower(*str1) < tolower(*str2)) return -1;
}
if (*str1 == *str2) return 0;
if (*str1 == '\0') return -1;
return 1;
}
int strcmp\u不敏感(常量字符*str1,常量字符*str2){
对于(;*str1&&*str2;++str1,++str2){
如果(tolower(*str1)>tolower(*str2))返回1;
如果(tolower(*str1)
尽管出于简单目的,我建议您使用glampert的答案。如果您不想依赖特定于平台的标题,您可以非常轻松地将整个输入字符串转换为小写:
void lower_string(char *str) {
for (char *p = str; *p != '\0'; ++p) {
*p = tolower(*p);
}
}
然后
lower_string(color);
或者进行自己的不区分大小写的比较
int strcmp_insensitive(const char *str1, const char *str2) {
for (; *str1 && *str2; ++str1, ++str2) {
if (tolower(*str1) > tolower(*str2)) return 1;
if (tolower(*str1) < tolower(*str2)) return -1;
}
if (*str1 == *str2) return 0;
if (*str1 == '\0') return -1;
return 1;
}
int strcmp\u不敏感(常量字符*str1,常量字符*str2){
对于(;*str1&&*str2;++str1,++str2){
如果(tolower(*str1)>tolower(*str2))返回1;
如果(tolower(*str1)
尽管出于简单的目的,我建议您使用glampert的答案。B和B具有不同的字符值,因此它们不相等。有一种非常健壮的方法可以解决这个问题——在进行比较之前,将整个字符串转换为大写或小写。这将确保蓝色、蓝色、蓝色和蓝色是相同的值。 在我的库devlib中,我有一些用于案例更改的函数。以下是实际功能:
#include <algorithm>
#include <string>
#include <cstring>
std::string toLower(std::string line)
{
std::string tmp = line;
std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
return tmp;
}
std::string toUpper(std::string line)
{
std::string tmp = line;
std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::toupper);
return tmp;
}
B和B具有不同的字符值,因此它们不相等。有一种非常健壮的方法可以解决这个问题——在进行比较之前,将整个字符串转换为大写或小写。这将确保蓝色、蓝色、蓝色和蓝色是相同的值。 在我的库devlib中,我有一些用于案例更改的函数。以下是实际功能:
#include <algorithm>
#include <string>
#include <cstring>
std::string toLower(std::string line)
{
std::string tmp = line;
std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
return tmp;
}
std::string toUpper(std::string line)
{
std::string tmp = line;
std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::toupper);
return tmp;
}
哇strcmp(颜色,“蓝色”)==0 | | strcmp(颜色,“蓝色”)==0@Earth科学:你已经试过什么了?它出了什么问题?您的scanf应该是
颜色
,而不是颜色
。字符串已经存在pointers@RyanHaining非常感谢。更改了第一个、最后一个和颜色(&C)。哎呀。。。strcmp(颜色,“蓝色”)==0 | | strcmp(颜色,“蓝色”)==0@Earth科学:你已经试过什么了?它出了什么问题?您的scanf应该是颜色
,而不是颜色
。字符串已经存在pointers@RyanHaining非常感谢。更改了&first、&last和&color。@EarthScience,不用担心。@EarthScience,不用担心。我刚开始学习C,但我会努力学习它到底是如何工作的。@EarthSciencelower\u string
只作为字符串,循环遍历每个字符,并使用tolower
使其小写strcmp\u-insensitive
是strcmp
的一个奇特版本,它在每次比较时调用tolower
。我可以写一个更简单的方法,只返回它们是否相等,不做大于/小于检查,如果这对你有帮助的话。我刚开始学习C,但我会尝试确切地了解它是如何工作的。@EarthSciencelower_string
只是作为字符串,循环遍历每个字符,并使用tolower
使其小写strcmp\u-insensitive
是strcmp
的一个奇特版本,它在每次比较时调用tolower
。我可以编写一个更简单的函数,它只返回它们是否相等,并且不执行大于/小于检查,如果这有助于您成为POSIX标准的一部分,那么它是可移植的。是POSIX标准的一部分,因此它相当便携。谢谢您的回答!这也很有帮助。谢谢。这些都是我的功能