本篇文章主要介绍了C/C++的字符串和数组的概念
在项目2的基础上用字符串存储用户名和密码
#include <iostream> #include <Windows.h> #include <string>//string 文件在std命名空间下,C++的标准库为string,C的为string.h using namespace std; int main(void) { string loginName; string pwd; cout << "请输入账号:"; cin >> loginName; cout << "请输入密码:"; cin >> pwd; system("pause"); cout << "您的账号是" << loginName << endl; cout << "您的密码是:" << pwd << endl; system("pause"); return 0; }
运行结果:
字符串就是0个或多个“字符”组成的“有序”序列。
“字面型”字符串常量,要求用""扩起来。
printf(“name=%s”, “heihei”); //C语言方式输出字符串,%s用来匹配字符串
cout << “heihei”; //C++方式输出字符串
在C语言中,使用char类型的数组,来存储字符串变量
注:C语言中,没有专用的字符串类型。
在C++中,使用std::string类型来表示字符串变量。
在c语言中,为了便于存储字符串,要求在最后一个字符的后面存储一个0(一个字节)。
这个0, 称为“字符串结束符”,常用 ‘\0’ 表示。
在C++语言中,字符串的最后并没有字符串结束符!
实际存储时,根据编译器的不同,最后可能存储一个字符串结束符,也可能没有。
#include <iostream> #include <Windows.h> #include <string> using namespace std; int main(void) { //1.定义与赋值 c++风格 string girlFriend1; girlFriend1 = "王菲"; string girlFriend2; girlFriend2 = girlFriend1; //2.初始化 string girlFriend3("周迅"); string girlFriend4(girlFriend3); string girlFriend5(10,'a');//等价与 string girlFriend5("aaaaaaaaaa"); string girlFriend6;//没有赋值就是空串 cout << "girlFriend1=" << girlFriend1 << endl; cout << "girlFriend2=" << girlFriend2 << endl; cout << "girlFriend3=" << girlFriend3 << endl; cout << "girlFriend4=" << girlFriend4 << endl; cout << "girlFriend5=" << girlFriend5 << endl; cout << "girlFriend6=" << girlFriend6 << endl; //c语言风格 char a[20] = "hello world"; char b[20] = { 'h','e','l','l','o',' ','w','o','r','l','d','\0' }; char c[] = "hello world"; char d[] = { 'h','e','l','l','o',' ','w','o','r','l','d', 0 }; printf("a = %s\n", a); printf("b = %s\n", b); printf("c = %s\n", c); printf("d = %s\n", d); //字符串与字符数组的区别:字符串一定是一个char的数组,但char的数组未必是字符串; //数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。 //字符串定义,要么指定字符长度,要么以0或'\0'结尾。 //错误示范:会出现乱码 char buf[] = { 'a', 'b', 'c' }; printf("buf = %s\n", buf); system("pause"); return 0; }
#include <iostream> #include <Windows.h> #include <string> using namespace std; int main0302(void) { //demo1 - 字符串的输入从第一个非空白字开始,直到遇到空白字符时停止输入 //空白字符是指:空格,制表符,回车符 //string job; //cout << "你是做什么工作的呀?" << endl; //cin >> job; //cout << "做" << job << "收入应该很不错吧!" << endl; demo2 - 自动跳过空白字符 //string university; //string profession; //cout << "你是读那个大学什么专业的呢?" << endl; //cin >> university >> profession; //cout << university << "的" << profession << "专业很不错哦!" << endl; demo3 - 循环输入 //string food; //int count = 0; //cout << "你喜欢什么食物?" << endl; //while (cin >> food)//当用户输入 Ctrl + z 并回车 cin >> food返回0, 0就是假 //{ // cout << "我喜欢吃" << food << endl; // cout << "你还喜欢吃啥?" << endl; // count++; //} //cout << "你喜欢的事物有" << count << "种" << endl; //demo4 - 输入一行 getline string addr; cout << "你想去哪?" << endl; getline(cin, addr);//读取一行数据写入(含空格),到‘\n’结束,同时‘\n’会被丢弃 //empty方法 if (addr.empty() == true) { cout << "你竟然不知道,你这个没有梦想的咸鱼!" << endl; return 1; } else { cout << "正好我也要去" << addr << ",我带着你去吧" << endl; } //size()和length()完全等效 //长度是指字符串占用的字节数,如果含有汉字,那么总的字节数和汉字个数不同 cout << "addr的长度是:" << addr.size() << endl; cout << "addr的长度是:" << addr.length() << endl; system("pause"); return 0; }
#include <iostream> #include <Windows.h> using namespace std; int main0303(void) { /* 字符串的比较: 从字符串的第一个字符开始,对应字符逐个比较,直到遇到不相等的字符为止。 比较运算符有: > >= < <= == 比较运算的结果:逻辑真, 逻辑假 “123” < “1230” 真 “19” > “123456789” 真 “2” > “1999” 真 “123” == “123” 真 “123” == “1230” 假 c语言的字符串,不能使用这个方式来进行字符串比较。 */ string myGirl = "小芳"; string yourGirl; cout << "你喜欢的女孩是?" << endl; cin >> yourGirl; if (yourGirl == myGirl) { cout << "兄弟,你好绿!" << endl; } else { cout << "祝你被绿" << endl; } system("pause"); return 0; }
#include <iostream> #include <Windows.h> using namespace std; int main0304(void) { //把+左侧的字符串,和+右侧的字符串,直接拼接成一个新的字符串 //注意顺序。(C语言的字符串不支持该方式) string a = "heihei"; string b = "wakaka"; string c; c = a + b; cout << c << endl; c += "yi"; cout << c << endl; system("pause"); return 0; }
数组,就是多个元素的有序“组合”。
int a[5] //定义了一个数组a,包含5个元素,每个元素都是int变量
#include <iostream> #include <Windows.h> #include <stdio.h> using namespace std; int main0306(void) { //在定义数组的同时,设置数组内的元素值。 int a[8] = { 20,45,20,33,55 }; printf("%d,%d,%d,%d,%d\n", a[0], a[1], a[2], a[3], a[4]); cout << a[0] << "," << a[1] << "," << a[2] << "," << a[3] << "," << a[4] << endl; //把数组所有元素初始化为0 int b[8] = { 0 }; //但这样把数组第一个元素初始化为1,其它值都初始化为0 int c[8] = { 1 }; //定义数组d, 这个数组包含3个元素! // 根据“初始化列表”,自动计算数组的容量 int d[] = { 1,2,5 }; //仅仅C编译器支持,C++编译器中不支持,即C++程序中不能使用。 int exercises[7] = { [1] = 1, //a[1] = 1 [3] = 2, //a[3] = 2 //没有指定的成员,被初始化为0 }; system("pause"); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <Windows.h> using namespace std; int main0305(void) { /* * 字符串常量 “字面型”字符串常量,要求用""扩起来。 printf("name=%s", "Tree"); //C语言方式输出字符串,%s用来匹配字符串 cout << “Tree”; //C++方式输出字符串 * 字符串变量的表示 在C语言中,使用char类型的数组,来存储字符串变量 注:C语言中,没有专用的字符串类型。 在C++中,使用std::string类型来表示字符串变量。 * 在c语言中,为了便于存储字符串,要求在最后一个字符的后面存储一个0(一个字节)。 这个0, 称为“字符串结束符”,常用 ‘\0’ 表示。 在C++语言中,字符串的最后并没有字符串结束符! 实际存储时,根据编译器的不同,最后可能存储一个字符串结束符,也可能没有。 * */ char a[20] = "hello world"; char b[20] = { 'h','e','l','l','o',' ','w','o','r','l','d','\0' }; char c[] = "hello world"; char d[] = { 'h','e','l','l','o',' ','w','o','r','l','d', 0 }; printf("a = %s\n", a); printf("b = %s\n", b); printf("c = %s\n", c); printf("d = %s\n", d); //字符串与字符数组的区别:字符串一定是一个char的数组,但char的数组未必是字符串; //数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。 //字符串定义,要么指定字符长度,要么以0或'\0'结尾。 //错误示范:会出现乱码 char buf[] = { 'a', 'b', 'c' };//这是一个字符数组 printf("buf = %s\n", buf); char name[10]; printf("请输入你的名字:"); scanf("%s", name); printf("你的名字是:%s\n",name); cout << "请输入你的名字:"; cin >> name; cout << "你的名字是:" << name << endl; system("pause"); return 0; }
#define _CRT_SECURE_NO_WARNINGS #define NOMINMAX #include <stdio.h> #include <iostream> #include <Windows.h> using namespace std; void clearBuff() { char tmp; while ((tmp = getchar()) != '\n');//如果不是回车就读取输入缓冲区的字符 } int main(void) { char name[16]; char addr[64]; printf("敢问菇凉芳名?\n"); scanf("%s", name); //scanf读取到回车符结束,此时回车符仍在输入缓冲区 //清空输入缓冲区 //fflush(stdin); //c语言,vs中没有效果 //cin.sync(); //C++,vs中没有效果 //cin.ignore(std::numeric_limits< streamsize >::max(), '\n');//清除输入缓冲区的所有内容,直到遇到回车符为止, 各种编译器都有效 //自定义的clearBuff() clearBuff(); printf("家是哪里的呀?\n"); gets_s(addr);//这时用gets碰到仍在缓冲区的回车符,并把回车符丢掉 printf("请随便输入:"); char a[10]; gets_s(a); printf("name=%s,addr=%s,a=%s", name, addr,a); system("pause"); return EXIT_SUCCESS; }
清空输入缓冲区(四种方法)详解
1.项目需求:允许输入多个单词,并统计单词个数,和总长度
2.项目实现:
C++
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <Windows.h> #include <string> #include <stdio.h> using namespace std; int main(void) { string word; int count = 0; int legth = 0; cout << "请输入任意多个单词:" << endl; while (true) { //输入成功则返回cin对象本身,遇到文件结束符ctrl+z,返回0;vs中cin>>的返回值不能与0直接比较; /* while(cin>>a)的调用,这里并不是cin的返回值, 而是>>操作重载函数istream& operator>>(istream&, T &); 的返回值,其中第二个参数由cin>>后续参数类型决定。 其返回值类型为istream&类型,大多数情况下其返回值为cin本身(非0值),只有当遇到EOF输入时,返回值为0。 但在vs2019的编译器中 (cin >> word)的返回值并不能直接与0比较,这里采用逻辑! */ if (!(cin >> word)) { break; } count++; legth += word.length(); } cout << "一共有" << count << "个单词" << endl; cout << "总长度为:" << legth << endl; system("pause"); return 0; }
C
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> int main(void) { char word[64]; int count = 0; int length = 0; printf("请输入任意多个单词:"); while (1) { // 输入失败 返回0 // 遇到文件结束符 (ctrl+z),返回-1(EOF) if (!scanf("%s", word)) { break; } count++; length += strlen(word); } printf("一共有%d个单词\n", count); printf("总长度:%d\n", length); system("pause"); return 0; }
1.项目需求:许输入多行单词,并统计行,和单词总长度
2.项目实现:
C++
#include <iostream> #include <string> #include <Windows.h> using namespace std; int main030201(void) { string line; int lineCount = 0; int length = 0; cout << "请输入任意多行:" << endl; while (1) { // 遇到文件结束符时, 返回NULL(0) if (!getline(cin, line)) { break; } lineCount++; length += line.length(); } cout << "一共有" << lineCount << "行" << endl; cout << "总长度: " << length << endl; cout << "line = " << line << endl; system("pause"); return 0; }
C
#define _CRT_SECURE_NO_WARNINGS #define true 1 #include <stdio.h> #include <stdlib.h> int main030202(void) { char line[255]; int lineCount = 0; int length = 0; printf("请输入任意行:\n"); while (true) { if (gets(line) == 0) // !gets(line) { break; } lineCount++; length += strlen(line); } printf("总行数:%d\n", lineCount); printf("总长度:%d\n", length); system("pause"); return EXIT_SUCCESS; }