什么是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等的更多准备工作,请参阅“完整面试准备课程” 。