/*今天复习下字符串的相关知识 第七章 字符串---分析文本 正常的程序都需要和用户进行交互,那么字符串肯定是必须的。比如以前的提示用书输入一个数字等。 7.1 字符串的存储方式 计算机以数字化的方式存储文本。字符串中的每个字节对应ASCII。感兴趣可以用翻书看一下。 字符串里面的每个元素基类型是字符。一个汉字是两个字节。字符串末尾有个\0 表示结束。 其实你在敲键盘的时候,实际上传入的是ASCII值。字符串就是字节流。 7.2 字符串的声明和初始化 字符数组嘛。 字符指针也可以。 注意末尾都是有\0的、 7.3 字符串处理函数 常见的strcpy 和 strcat 函数。以及他们加n版本和不加n的版本。其中n可以控制越界、 关于getlint 函数的问题。 如果你使用的字符数组或者指针,那么调用格式是cin.getline(const char*, n) 如果你用的是string 字符串格式是: getline(cin,n) n是个数。cin是输入流、记得加上相关头文件。 getline 函数的用途是读取一整行输入,在你按下回车之前都算,白空格不在是截止他们。 getline 函数还有几个重载函数。最后一个参数可以指定截止字符。一共三个参数。 注意下转义字符。用\\可以取消转义。 7.4 读取字符串的输入 首先是cin>>语句,cin和>>操作符表示从键盘获得字符存到相应的变量里。 但是用cin语句在获取字符串的时候可能不会符合你的预期操作。因为它是无法获取整行输入。也就是说 在用户按下回车键之间输入的所有数据,它只能获取第一个白空格。白空格是指 空格,制表符,换行符的统称。 它只能获取第一个白空格之前的输入。不信可以实验下。 同样的,你用它输入变量的时候也是如此。在空格之后的都不算了。 最好在一个程序里只使用一种获取输入的方式。因为getline 和cin对换行符的解释是不同的。 介绍下 atoi 和atof atoll 等函数。从数字字符串中提取数字。比如“1234” 注意我写的是字符串1234,不是纯粹的 的数字,但是你可以通过atoi 函数进行提取数字。同时你还可以用erase 函数擦掉里面的非数字内容。 getline 函数里,如果你啥都不输人的话,就按下回车键,那么字符串的常度就是0 ,你可以根据这个来判断是否 跳出循环。 大小写转换 toupper ,tolower 函数。头文件cctype. 7.5 单个字符和字符串。 单个字符在C++中是被解释成ascii 码的。而字符串是被解释为地址,原因是字符串和指针关系比较乱啦。 7.6 c++中的string 类型。 c 和c++里以\0为结束标记的都称为c字符串。 string类型很方便,很好用,不需要那么多函数了。可以直接进行赋值,比较。 其次string里面元素基类型也是字符。 你可以把string里的每个元素用数组的方式输出它。 其次就是string 一些函数了。 讲一下 sizeof 和length 函数。sizeof 是返回占用的字节数,和字符串多少没关系。length 返回的是当前的长度。 如 char str[40] ="hello" 其中sizeof 返回40个字节,但是length 却是只有5 ,截止字符是不计算的。 总结: 1)文本字符串里面其实存储的是ASCII值。 还要\0 , 2) 区分c字符串是看是否使用了0值字节。 3)字符串的长度和字符串当前的长度问题。 4)stcpy strcat 等函数。 5)strlen 函数 6)字符串复制的时候不用越界,可以用strncpy 控制下。 7) learn to use cin and getline Drive me crazy !!chinese characters!! 8)"a" and 'a' difference between them 9)stl 库中的string类型 。很好用。可以考虑放弃c 字符串了。但是某些方面,c字符串也很强大。*/ #include "stdafx.h" #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char str[10] = "AAllo!"; cout << (int)str[1] << endl; system("pause"); return 0; } #include<iostream> using namespace std; int main(){ char str[39]; //while (cin >> str){ // cout << str << endl; //} cin >> str; cout << atoi(str); system("pause"); return 0; }