迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 中字符串和字符的比较

作者:迹忆客 最近更新:2023/03/31 浏览次数:

这个简单的指南是关于在 C++ 中使用字符串以及如何将这些字符串与其他文字进行比较。在继续之前,我们将简要介绍 C++ 中的字符串。

在 C++ 中,字符串可以按两种不同的方式分类:

  1. 创建一个 Character 数组以形成一个字符串
  2. 在 C++ 中使用标准的 String

在 C++ 中创建字符数组

与 C 语言一样,C++ 也为我们提供了字符数组,即 char 数组,它可以用作字符串文字。它是一个以 null 结尾的一维字符数组。

因此,字符串是通过形成一个 char 数组并以 null 字符终止它来创建的。

请注意,要使用聚合方法(例如,cout<< charArray)打印字符数组,null 字符必须终止字符数组。C++ 使用 \0 作为 NULL 字符,它有助于聚合方法来检测字符串的结尾(如果没有一些结束标记符号就不可能检测到数组的结尾)。

因此,下面的示例声明了一个大小为 11 的字符数组,尽管 C 语言仅包含十个字符。

char word[11] = {'C', '-', 'l', 'a', 'n','g','u','a','g','e','\0'};

上面的语句也可以写成下面这样,前提是你遵循初始化规则。

char word[] = "C-language";

如果你忘记将 null 字符放在末尾,编译器会隐式地将 null 字符放在末尾。让我们看看下面的程序。

#include <iostream>
using namespace std;

int main () {

  char word[11] = {'C', '-', 'l', 'a', 'n','g','u','a','g','e','\0'};
   cout << "First message: ";
   cout << word << endl;
   return 0;
}

上述代码片段中的第 06 行将向输出提供 First Message:,而第 07 行将显示 word 变量中的所有字符,直到遇到\0。因此,上面的代码片段将生成以下输出。

First Message: C-language

在 C++ 中使用 String

C++ 有一个内置的 string.h 头文件作为其标准库的一部分。它提供了一系列功能(例如,strcpystrlen 等)来处理 C 风格的字符串(即,以 null 结尾的字符串)。

请注意,所有没有 .h 的现代 string 库都与 string.h 不同。string 类库 是一个用于操作现代 C++ 字符串的 C++ 库,而 string.h 是一个用于操作 C 样式字符串(即以空字符结尾的字符串)的 C 头文件。

让我们看看下面的代码来理解 string.h 库。

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    char country[] = "Pakistan";
    char countryTemp[50]="abc";

    cout<<"countryTemp length before initializing is:";
    cout<<strlen(countryTemp)<<endl;

    //strcpy()
    cout<<"Let's copy country to countryTemp"<<endl;
    strcpy(countryTemp,country );
    cout<<"countryTemp="<<countryTemp<<endl;

    cout<<"countryTemp length after copying country is:";
    cout<<strlen(countryTemp)<<endl;

    return 0;
}

上面的程序首先声明了两个字符数组(C-strings)并用 Pakistan 初始化第一个。第 10 行打印 countryTemp 的长度,即 3。

虽然 countryTemp 的总大小为 50 个字节,但 strcpy 只能根据 NULL 字符(放置在数组的第四个字节)计算大小。因此,strcpy 返回 3。

第 14 行使用 strcpy 函数将 country 数组的内容复制到 countryTemp。因此,countryTemp 的新长度变为 8

输出:

countryTemp length before initializing is:3
Let's copy country to countryTemp
countryTemp=Pakistan
countryTemp length after copying country is:8

C++ 中字符串与 Char 的比较

人们将字符串与字符常量进行比较是一个常见的问题。这实际上是不可能的。

参考下面的代码。

#include <iostream>
using namespace std;

int main()
{
    cout << "Do you want to proceed (y or n)?\n";
    char inp;
    cin >> inp;
    if (inp == "y")  //error here
        cout<<"Hello again"<<endl;
    else
        cout<<"Good Bye"<<endl;
    return 0;
}

在这个函数中,我们从用户那里做了一个输入,它是一个 char 变量,在 if 条件下,我们将它与一个用双引号括起来的字符串文字进行比较。此代码将生成错误:ISO C++ 禁止在指针和整数之间进行比较错误。

建议在 string 变量而不是 char 变量中进行输入以避免此错误。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout << "Do you want to proceed (y or n)?\n";
    string ans;
    cin >> ans;
    if (ans == "y")  //error here
        cout<<"Hello again"<<endl;
    else
        cout<<"Good Bye"<<endl;
    return 0;
}

输出:

Do you want to proceed (y or n)?
n
Good Bye

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

Arduino 复位

发布时间:2024/03/13 浏览次数:315 分类:C++

可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。

Arduino 的字符转换为整型

发布时间:2024/03/13 浏览次数:181 分类:C++

可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。

Arduino 串口打印多个变量

发布时间:2024/03/13 浏览次数:381 分类:C++

可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便