字符串及其头文件出现问题

Having problems with string and its header files

本文关键字:问题 文件 字符串      更新时间:2023-10-16
#include <iostream>
#include <cstring> //which one should I use...out of these three header files
#include <string>  //whats difference in each of them
#include <string.h>
int main()
{
    std::string first_name;
    std::string second_name;
    std::cout << "n First name : ";
    std::cin >> first_name;
    std::cout << "n Second name : ";
    std::cin >> second_name;
    strcat(first_name," ");         //not working
    strcat(first_name,second_name); //not working
    std::cout << first_name;
    return 0;
}

我之前做过关于 c++ strcat(字符串连接)的程序。我遵循了新的教程和新的IDE编译器(其中包含新的数据类型,即"字符串")。当我使用它尝试相同的方法时,它会给我错误。

错误:- ||=== 构建:在字符串 1 中调试(编译器:GNU GCC 编译器) ===| C:\Users\Admin\Desktop\c++ projects\string1\main.cpp||在函数 'int main()' 中:|
C:\Users\Admin\Desktop\c++ projects\string1\main.cpp|16|error: 无法将参数 '1' 的 'std::basic_string}' 转换为 'char*' 到 'char* strcat(char*, const char*)'|
C:\Users\Admin\Desktop\c++ projects\string1\main.cpp|17|error: 无法将参数 '1' 的 'std::basic_string}' 转换为 'char*' 到 'char* strcat(char*, const char*)'|
||=== 构建失败:2 个错误、0 个警告(0 分钟、0 秒)===|

strcat是使用字符串的旧式(当然我的意思是char*)。

现在只需#include<string>并轻松使用std::string

std::string name = "Foo";
std::string lastName = "Bar";
std::string fullname = name+" "+lastName;
std::cout << fullname ; // <- "Foo Bar"

更多: (@michael-克里林-黑客)

<string><string.h> 是两个不同的标头:

  • <string>适用于 C++ std::string
  • <string.h> 用于 C 字符串函数(如 strlen() 等),这应该<cstring>用于 C++ 项目(这是第三个,你不知道)。

More2:如果您更喜欢使用 C 样式,请尝试以下操作:

std::string name = "Foo";
std::string lastName = "Bar";
///
int len = name.length();
char* fullname = new char[len+1];
strncpy(fullname, name.c_str(), name.length());
fullname[len]='';
///
strncat(fullname," ", 1);
strncat(fullname,lastName.c_str(), lastName.length());
///
std::cout<<fullname;