📌  相关文章
📜  如何将C样式的字符串转换为std ::字符串,反之亦然?

📅  最后修改于: 2021-05-30 11:04:42             🧑  作者: Mango

什么是C风格的字符串?
这些字符串是以NULL字符结尾的字符数组。可以通过以下方式声明C样式字符串:

声明和初始化

/* To demonstrate C style strings */
#include
using namespace std;
int main()
{
    /* Null character has to be added explicitly */
    char str1[8] = {'H' , 'E' , 'L' , 'L' , 'O' ,
                     '-','1','\0' };
      
    /* Compiler implicitly adds Null character */
    char str2[] = "HELLO-2" ;  
   
    /* Compiler implicitly adds Null character. 
       Note that string literals are typically stored
       as read only */
    const char *str3 = "HELLO-3" ;
  
    cout << str1 << endl << str2 << endl << str3;
    return 0;
} 

输出:

HELLO-1
HELLO-2
HELLO-3

C风格的字符串使用非常有用的函数进行操作,例如strcpy()strlen()strpbrk()strcat()strstr()等等!(所有这些函数都是’ cstring ‘标头的成员函数)。

什么是std :: 字符串?
C++标准库包含函数和类。字符串是其类之一。在这里,我们处理一个字符串类的对象。此std ::字符串会自行处理并管理自己的内存。

声明和初始化

/* To demonstrate std::string */
#include
#include           
  
using namespace std;
int main()
{
    /* s becomes object of class string. */
    string s;  
  
    /* Initializing with a value. */           
    s = "HELLO";
  
    /* Printing the value */          
    cout << s; 
               
    return 0;
}

输出:

HELLO

将C-String转换为std :: 字符串。
但是为什么我们需要这种转变?从C字符串到std :: 字符串?这是因为

  • Std ::字符串管理自己的空间。因此,程序员无需担心内存,与C字符串不同(因为它们是字符数组)
  • 它们易于操作。可以使用常规运算符比较“ +”运算符和“ =”运算符。
  • 字符串:: find()和许多其他函数可以在std :: 字符串上实现,而不是在C-Strings上实现,因此这很方便。
  • 迭代器可以在std ::字符串使用,而不能在C字符串中使用。

还有很多!这是它的代码:-

/* To demonstrate C style string to std::string */
#include
  
using namespace std;
int main()
{
    /*Initializing a C-String */
    const char *a = "Testing"; 
    cout << "This is a C-String : "<< a << endl;
  
    /* This is how std::string s is assigned
       though a  C string ‘a’ */
    string s(a);  
     
    /* Now s is a std::string and a is a C-String */
    cout << "This is a std::string : "<< s << endl;
    return 0;
}

输出:

This is a C-String : Testing
This is a std::string : Testing

上面的转换也适用于字符数组。

// Character array to std::string conversion 
    char a[] = "Testing"; 
    string s(a); 

将std ::字符串转换为C样式字符串
为什么我们需要这种转变?从std ::字符串到C字符串?

  • 这是因为标头中有几个强大的功能,使我们的工作变得非常容易。
  • atoi()itoa()以及更多函数仅适用于C字符串。

您也可以想到其他原因!
这是转换代码:

/* To demonstrate std::string to  C style string */
#include
#include /* This header contains string class */
using namespace std;
int main()
{
    /* std::string initialized */
    string s = "Testing";  
    cout << "This is a std::string : "<< s << endl;
  
    /* Address of first character of std::string is 
       stored to char pointer a */
    char *a = &(s[0]); 
  
    /* Now 'a' has address of starting character
      of string */
    printf("%s\n", a);                 
    return 0;
}

输出:

This is a std::string : Testing
This is a C-String : Testing

std :: 字符串还具有一个函数c_str() ,该函数可用于获取以null结尾的字符数组。

/* To demonstrate std::string to C style string using
   c_str() */
#include
using namespace std;
  
int main()
{
    /* std::string initialized */
    string s = "Testing";  
    cout << "This is a std::string : "<< s << endl;
  
    // c_str returns null terminated array of characters
    const char *a = s.c_str();
  
    /* Now 'a' has address of starting character
      of string */
    printf("%s\n", a);                 
    return 0;
}

输出:

This is a std::string : Testing
This is a C-String : Testing

C字符串和std ::字符串都有自己的优点。人们应该知道它们之间的转换,以便轻松,有效地解决问题。

相关文章:

C++字符串类及其应用|套装1
C++字符串类及其应用|套装2

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”