字符串:双引号引起的;系统自动在末尾加**‘\0’** 字符串结束符。 通过特殊的初始化、输入、处理、输出,可用来处理可变的字符串;定义 char s[20] 初始化:
char s[10] = { " I am fine" };char s[10] = " I am fine" ;char a[3][8] ={“FINE”,“STUDENT”,“FIRE”}; 二维字符数组用两个下标表示一个字符。char s[100]; 字符串整体输入
cin>>s; 不能提取s中空白符后面的内容gets(s); 可提取空格符字符串整体输出
cout<<s;puts(s);gets和puts的原型在 include <stdio.h>
【例】输入“I am fine.” cin>>s------------s中只有“I” gets(s)------------s中有“I am fine.”
字符串处理原则
整体输入输出不用数组长度控制循环,通过‘\0’判断是否结束循环构造时要保证结尾有‘\0’【例】实现小写变大写
#define N 100 #include <iostream> #include <stdio.h> using namespace std; int main() { char s[N]; int i; gets_s(s); for (i = 0; s[i] != '\0'; i++) if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A'; puts(s); return 0; }运行结果: 出现问题: 在使用gets(s)出现标识符未被定义的情况,将其改为fgets(s)后此问题被解决但出现函数调用中的参数太少的问题[头大.]fgets要有三个参数,其原型为:charfgets(charstr,int n,FILE*stream); …果断放弃 后将其改为 gets_s(s) 后正常。 故障原因应该为VS2019中的stdio.h的头文件中不存在gets()的定义。被gets_s()和fgets()代替。
【例】复制字符串从 s 到 t 中
#define N 100 #include <iostream> #include <stdio.h> using namespace std; int main() { int i; char s[N], t[N]; gets_s(s); i = 0; while (s[i] != '\0') { t[i] = s[i]; i++; } t[i] = '\0'; puts(t); return 0; }常用字符串处理函数
strlen(str):求长度不包括’\0‘strlwr(str):大写变小写strupr(str):小写变大写strcpy(str1,str2):str2复制到str1strcat(str1,str2):str2接到str1后面strcmp(str1,str2):比较大小,从左至右逐字比较ASCII,直到出现不同或遇见’\0‘ str1<str2----返回 -1 str1=str2----返回 0 str1>str2-----返回 1上述函数 include <string.h> 中 strcpy 、strcat 中第一个参数不能取字符串常量 其他都可以为字符组、字符指针变量和字符串常量
【例】以strcmp()函数为例
#include <iostream> #include <string.h> int main() { char s[80]; while (1) //无条件循环 { gets_s(s); if (strcmp(s, "pass")) //==if(strcmp(s,"pass")!=0) 即何时结果为0 puts("lnvalid passward.\n"); else break; } puts("pass\n"); return 0; }运行结果: