[C++]cpp小笔记3 --- C++ String and char

原创 2013年12月05日 10:41:52

字符串实际上就是在内存中在连续位置上保存的字符,字符串结尾以'\0' null字符表示结束。

String在C++中有两种表现形式。1. 用C style; 2. 用String class.

1. C Style String

Store String in the form of an array of chars. The last bit of the char array MUST BE '\0' to indicate the end of the string.
char dog[8] = { 'b', 'e', 'a', 'u', 'x', ' ', 'I', 'I'}; // not a string!, continuous stored but not ended with '\0'
char cat[8] = {'f', 'a', 't', 'e', 's', 's', 'a', '\0'}; // a string!
char val[] = {"this is also a string"};                  //a string! '\0' is added implicitly for double quotation""
	cout <<sizeof(wchar_t) <<endl;
	cout<<sizeof(char32_t) <<endl;
	cout<<sizeof(char16_t) <<endl;
	wchar_t wchar[] = {L" a 4-Byte long string"};
	char32_t char32[] = {"a 4-Byte long string"};
	char16_t char16[] = {"a 2-Byte long string"};
Result is:

4

4

2



除了显式的指定'\0'的位置,还可以用"" 双引号来给char array初始化:
char bird[11] = "Mr. Cheeps";  // the \0 is understood
char fish[] = "Bubbles";   // let the compiler count

Quoted strings always include the terminating null character implicitly。要注意的一点是,正因为 " " 双引号会自动添加 \0, 所以"s"这样的一个字符实际上包含两个字符, 而's'近包含一个字符。
char shirt_size = 'S';   // this is fine
char shirt_size = ”S“;   // this is wrong

cin只能读取一个word, 任何空白符--space, tab, newline将结束cin读取,cin自动在读取的内容后添加'\0'并将内容保存在character array中。

例如:
#include <iostream>
#include "Chapter4.h"
using namespace std;

int main() {
	using namespace std;
	const int ArSize = 20;
	char name[ArSize];
	char dessert[ArSize];
	cout << "Enter your name:\n";
	cin >> name;
	cout << "Enter your favorite dessert:\n";
	cin >> dessert;
	cout << "I have some delicious " << dessert;
	cout << " for you, " << name << ".\n";
	return 0;
}

结果:
Enter your name:
Alistair Dreeb
Enter your favorite dessert:
I have some delicious Dreeb for you, Alistair.

2. C++ string class style string and its initialization

#include <string>

using namespace std;

string str1;
string str2 = "string";
string str3 = {"also a string"};
string str4 {"string too!"};

3. C-style and string style functions.

C-style
strcpy(dest, src);                                       //copy src char arry  to dest char array. 
strncpy(dest, src);                                     //copy "n" src char arry  to dest char array. 
strlen(chararray1);                                   //calulate the length of chars in chararray1
strcat(chararray1, chararray2);               //concate chararray2 to the end of chararray1

In C-style string, 
char char1[] = {'1','2','3'};
char char2[3];
char2 = char1;    //wrong, char copy need to use strcpy().


string ctyle functions:
string str = "xyz";
str.size();                          //size of str
#include <iostream>
#include "Chapter4.h"
#include <string>
#include <cstring>  //C-style string library
 using namespace std;

int main() {
	using namespace std;
	const int ArSize = 20;
	char name[ArSize] = "bbai";
	char dessert[ArSize];
	string namestr = "bbai";

	//strcpy name to dessert
	strcpy(dessert, name);
	cout <<" copy from " << name << " to "<<dessert<<endl;
	int n = 2;
	char dessert2[ArSize];

	//strncpy n characters from name to dessert2
	strncpy(dessert2, name, n);
	cout <<" copy first "<< n << "characters from " << name << " to "<<dessert2<<endl;

	//strcat
	strcat(dessert2, name);  //add name to the end of dessert2

	//strlen
	cout<< "length of name is " << strlen(name) << " length of dessert2 is " << strlen(dessert2) <<"  and lenght of string is " << namestr.size()<<endl;
	return 0;
}

Result:
 copy from bbai to bbai
 copy first 2characters from bbai to bb
length of name is 4 length of dessert2 is 6  and lenght of string is 4

Raw string representation. PS, tired with R but got error...

raw strings use "( and )" as delimiters, and they use anR prefix to identify them as rawstrings: 

cout << R"(Jim "King" Tutt uses "\n" instead of endl.)" << '\n';

This would display the following:

Jim "King" Tutt uses \n instead of endl.

The standard string literal equivalent would be this:

cout << "Jim \"King\" Tutt uses \" \\n\" instead of endl." << '\n'; 

cin.get(), cin.get(char) and cin>>ch

cin>>ch 会自动过滤whitespaces, new lines, and tabs, 所以一遇到这些字符就结束输入;

cin.get() & cin.get(char)不会过滤,会全部返回;

cin.get()读到EOF return false;
cin.get(char)读到EOFreturn EOF;



C++中string类型与char *类型转换

1.string类型转换为char * (1)使用stringstream进行转换 代码为: #include #include #include #include usi...
  • shuaiby
  • shuaiby
  • 2012年10月31日 11:23
  • 15415

C++基础积累(3)string和char*、int的互转方法

最常见类型互转~ 1、char* 转string  char* cp="char"; string sp=cp; cout2、string转char* 有三种方法 ①.data string sg...
  • aa4790139
  • aa4790139
  • 2012年11月21日 15:40
  • 3775

c++ string和char* char[]的互转

转自:点击打开链接 string 与char* char[]之间的转换,有需要的朋友可以参考下。 1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字...
  • zjcxhswill
  • zjcxhswill
  • 2016年02月26日 10:41
  • 3221

base64编码c++版本

C++版本的base64编码,使用vector和sring做为输入输出,原文出自http://www.adp-gmbh.ch/cpp/common/base64.html,稍微做了一些改动: #...
  • dotphoenix
  • dotphoenix
  • 2014年02月20日 10:47
  • 5678

C++将char/char*/string/int加入到string中

#include using namespace std; ... char c = 'A'; char* lvlpcStr = "hello"; string lvStr,lv...
  • rocklee
  • rocklee
  • 2017年07月19日 12:25
  • 216

c++中char *与string之间的相互转换及原理

1. string转const char* string s ="abc"; constchar* c_s = s.c_str(); 2. const char*转string  ...
  • wangqing_12345
  • wangqing_12345
  • 2016年07月09日 16:24
  • 4059

C++ char数组和string类简单使用总结

使用char数组,进行字符串的操作,是c风格的操作方式。 string是C++的风格,感觉string本质上就是一个vector 以下代码详细展示了字符串的常见操作 #include #inc...
  • hust_bochu_xuchao
  • hust_bochu_xuchao
  • 2016年10月11日 11:30
  • 2790

c++的字符串char与string相互转化,以及string的,切割,替换字符,字符串拼接方法

1,char可以用一下的方法初始化 const char* char1 = "123"; const char* char2 = "456"; const cha...
  • ybhjx
  • ybhjx
  • 2016年03月31日 09:11
  • 2639

c++ 中 char 与 string 之间的相互转换问题

第一部分: 将  char *    或者    char []   转换为  string 可以直接赋值,转换。       第二部分: 将   string   转换为 ch...
  • pql925
  • pql925
  • 2017年04月09日 13:20
  • 1056

实战c++中的string系列--string与char*、const char *的转换(data() or c_str())

在工程中,我们也有很多时候用到string与char*之间的转换,这里有个一我们之前提到的函数 c_str(),看看这个原型:const char *c_str();c_str()函数返回一个指向正规...
  • wangshubo1989
  • wangshubo1989
  • 2015年12月13日 11:43
  • 7124
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[C++]cpp小笔记3 --- C++ String and char
举报原因:
原因补充:

(最多只允许输入30个字)