C++ 字符串结束后, 有一个特殊的"结束标记字符"-- '\0'。
对应数字是0 '\n'就是一种特殊字符
getchar() putchar()
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
char s;
while(1){
s = getchar( ) ; //每次调用getchar ()函数,读人一个字符
if (s == EOF) break ;
if ( 'a' <= s && s <= 'z') //如果这个字符是小写字母
s += 'A' - 'a'; //把它转换成大写字母,这样写和上面是一样的
putchar(s); //调用putchar ()函数,输出一个字符
}
return 0;
}
运行后 发现无论输入什么程序无反应.因为程序在等待输入..ctrl+Z 然后回车才完成读入.
getchar( )函数会返回EOF(一个特殊的常量),即 End of File,这标志着读入已经结束了。
gets() 读入字符数组 因为数组越界的风险,已经不建议使用.
puts() 输出同时还能自动换行,还在使用.
可以使用strlen( 字符串名)函数来查询 字符串的长度。该函数包含在cstring头文件
strcpy(字符串名,"hello" ) 可用来 赋值字符数组 赋值用.char a [100]=hello"
strcmp可用于 比较2个字符数组 (按照字典序等)
fgets 用来读入一行字符串 指定了最大读入数量所以安全
fgets (s,sizeof(s),stdin); //指定了最大读入数量所以安全
sscanf()函数 sscanf(字符串名,"d",&a );在字符串种读入一个整数a
sprintf() 将一个int类型的a 输出到字符串中
string例题:
标题统计。
统计一篇作文的标题中有多少个字符。注意:标题中可能包含大,小写英文字母,数字字符、空格和换行符,且字符串中的字符和空格数总和不超过5。统计标题字符数时,空格和换行符不计算在内。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
int ans = 0;
while (cin>>s) //循环输入 cin>>s本身返回0,无EOF情况
ans +=s.length(); //字符串长度
cout<<ans<<endl; //字符串string类型甚至可以s=s+s;拼接
return 0;
}
1) string s:定义一个名字为s的字符串变量。
2) s+=str 或s.append( str):在字符串s后面拼接字符串str。
3) s<str:比较字符串s的字典序是否在字符串str的字典序之前。
4) s.size( )或s.length( ):得到字符串s的长度。
5) s.substr(pos , len):截取字符串s,从第pos个位置开始len个字符,并返回这个字符串。
6) s.insert( pos,str):在字符串s的第pos个字符之前,插入字符串str,并返回这个字符串。
7) s.find(str,[pos]):在字符串s中从第pos个字符开始寻找str,并返回位置,如果找不到返回-1。pos可以省略,默认值是0。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s,str;
int q;
cin>>q>>s;
for(int i=0;i<q;i++){
int w=0;
cin>>w;
switch(w){
case 1:
cin>>str;
s+=str;
cout<<s<<endl;
break;
case 2:
int a,b;
cin>>a>>b;
s=s.substr(a,b); //提取真不错
cout<<s<<endl;
break;
case 3:
int c;
cin>>c>>str;
s.insert(c,str);//插入
cout<<s<<endl;
break;
default:
cin>>str;
cout<<(int)s.find(str)<<endl;//找第一次出现位置
break;
}
}
return 0;
}