字符串不是太难,但特别多细节,一不注意就会错qaq
到现在为止都没打完。。。
但还是先写了。。。(先声明,本人Pascal转c++,打程序时总少不了尴尬。。。)
1。输入输出
输入:
1)scanf:(可读入多个字符串)
如scanf("%s%s%s",&s1,&s2,&s3)到空格就换一个
一定要加&,不然会错,吃了好多次亏%>_<%
2)gets(只能读一个字符串,好处是可以一下读一行,很好用。。)
输出:
1)printf:
只输出字符串,不输出单个字符,(和pascal差挺远)
2)puts(字符串和换行符,直接换行,很棒。。)
当然输入还有一种很作弊的方法:
看下题:
一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
Input
一行,一个字符串(长度不超过200),句子的头和尾都没有空格。
Output
过滤之后的句子。
Sample Input
Hello world.This is c language.
Sample Output
Hello world.This is c language.
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int main() { string s; while (cin>>s) cout<<s<<‘ ‘; }
迷之方法。。。
2。一些字符串处理函数(单个字符串处理下面说)
左函数格式,右函数功能
strupr(字符串名) |
将字符串中小写字母换成大写字母 |
strcat(字符串名1,字符串名2) |
将字符串2连接到字符串1后边,返回字符串1的值。 |
strncat(字符串名1,字符串名2,长度n) |
将字符串2前n个字符连接到字符串1后边,返回字符串1的值。 |
strcpy(字符串名1,字符串名2) |
将字符串2复制到字符串1后边,返回字符串1的值。 |
strncpy(字符串名1,字符串名2,长度n) |
将字符串2前n个字符复制到字符串1后边,返回字符串1的值。 |
strcmp(字符串名1,字符串名2) |
比较字符串1和字符串2的大小,比较的结果由函数带回; 如果字符串1>字符串2,返回一个正整数; 如果字符串1=字符串2,返回0; 如果字符串1<字符串2,返回一个负整数; |
strncmp(字符串名1,字符串名2,长度n) |
比较字符串1和字符串2的前n个字符进行比较,函数返回值的情况同strcmp |
strlen(字符串名) |
计算字符串的长度,终止符’\0’不算在长度之内 |
strlwr(字符串名) |
将字符串中大写字母换成小写字母 |
目前没怎么用到,但以后难题还是挺有用的。。。(难题就是一个个小模板混在一起。。)
3.insert() //插入字符
erase() //删除字符
clear() //删除全部字符
replace() //替换字符
(这些天常用的)
4。说一说打字符串面临的问题
1)超级麻烦的字符串读入(但后来发现的puts和gets好用到爆炸。。)
还有一种很巧妙的方法
char a; string s=""; while ((scanf("%c",&a)==1)&&(a!=‘\n‘)) { s+=a; }
虽然很蠢,还是可以用的。。。
2)一个小细节:字符串的都是从0开始截取字符,如果不注意,超容易错。。。
3)针对单个字符串,有很多方法完成程序
但前面一定要加s.(s为简单的字符串)
练字符串的特别感悟:
当你的程序出问题运行不到时,
1.想想你的数组是不是开大了(不要问我为什么)
2.想想用scanf有没有加&(错最多)
3.想想你的字符能不能换行(不能的话改)
4.你的字符最好从0输入