【问题标题】:How to pass the first character of a string to a char?如何将字符串的第一个字符传递给char?
【发布时间】:2018-07-14 04:34:10
【问题描述】:

我正在尝试将字符串 firstname 的第一个字符放入 char 初始值中。我设法制作了initial = lastname[0],但我无法将firstname[0] 放入initial,因为它是一个字符,而firstname 是一个字符串类型。有什么办法可以绕过这个,使initial同时包含firstname和lastname的第一个字符。

int main(){

    string firstname;
    char lastname[30];
    char initial;

    cout<<"Enter your first name: "<<endl;
    cin>>firstname;

    cout<<"Enter your last name: "<<endl;
    cin>>lastname;

    initial = lastname[0];

    cout<<firstname[0];
    cout<<initial;     
} 

【问题讨论】:

  • char 包含单个字符。你不能在里面放两个字符。使用两个字符或一个字符串。另外,为什么lastname 使用 C 风格的字符串?

标签: c++ arrays string char


【解决方案1】:

使用.at() 从std::string 访问单个char,如下所示:

char initial = firstname.at(0);

如果你知道你总是要存储 2 个首字母,你可以使用与 lastname 相同类型的 C 样式数组:

char initials[2];
initials[0] = firstname.at(0);
initials[1] = firstname.at(1);

您还应该考虑对lastname 甚至initials 使用C++ 风格的std::string,而不是使用C 风格的固定大小数组。它们提供了许多有用的功能并防止缓冲区溢出和许多其他问题,而且几乎没有成本。

正如费翔已经指出的那样,也不可能从普通的char 中“选择”一个字符,因为它只包含一个字符。

也就是说,如果你真的必须使用 C 风格的 char 类型,你可以使用 const char* 来获得未定义的字符串长度,或者确保你的缓冲区足够长,以免意外写入其他部分记忆。通过检查cin.fail(),确保用户没有输入任何其他字符。

【讨论】:

    【解决方案2】:

    只需将首字母存储在另一个您初始化为大小为 2 的字符串中。对于对字符串进行边界检查的元素访问,请使用 .at() 而不是下标运算符 []。

    #include <iostream>
    #include <string>
    
    int main() {
        std::cout << "Enter your first name: ";
        std::string firstname;
        std::cin >> firstname;
    
        std::cout << "Enter your last name: ";
        std::string lastname;
        std::cin >> lastname;
    
        std::string initials(2, '\0');
        initials.at(0) = firstname.at(0);
        initials.at(1) = lastname.at(0);
    
        std::cout << initials << '\n';
    }
    

    用法:

    Enter your first name: Michael 
    Enter your last name: Scott
    MS
    

    【讨论】:

      【解决方案3】:
      void createFullName(const char *first, const char *last, char *full); 
      

      此函数接收名字 (first) 和姓氏 (last),名称应包含名字后跟空格,后跟姓氏。您应该使用 cstring 库中的 strepy 和 strcat 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        相关资源
        最近更新 更多