输入
1.%s(无取地址符!)
char s[100];
scanf("%s",s);
只能读到空格或换行。
2.(f)gets
char s[100];
gets(s);//better not
fgets(s,sizeof(s),stdin);//better
字符串可以包含空格或者换行。
3.字符
char s;
while(true){
s=getchar();
if(s=='0'){
break;
}
}
特定情况结束。
4.输入流
getline(cin,s);
将完整一行的输入数据读入到字符串中,可以包含空格。
函数
1.cstring库函数
strlen
#include<cstring>
strlen(a);
字符串长度,不计算'\0'
strcmp
int c=strcmp(a,b);
a>b,c>0
a=b,c=0
a<b,c<0
strcat
strcat(a,b);
b的内容加到a里(a足够大)
strcpy
strcpy(a,b);
b的内容复制到a(a足够大)
2.string库函数
可以直接string s定义字符串。
连接
s+=str;
s.append(str);
比较大小(ASCII)
s<str
长度
s.size;
s.length;
截取字符串
s.substr(3,7);
从第3个位置开始7个字符,截下这个字符串。
插入
insert(3,str);
从第3个字符前插入字符串。
寻找
s.find(str,[pos]);
在字符串s中第pos个字符开始寻找字符串str,并返回其位置,找不到返回-1。
替换
s.replace(pos,n,str);
在字符串s中第pos个字符开始把长度为n的字符串替换为str。
实战
洛谷P1308 单词数统计
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int main(){
string sen;
string word;
int m,s;
s=0;
getline(cin,word);
getline(cin,sen);
for(int i=0;i<word.length();i++){
if(word[i]<'Z'&&word[i]>'A'){
word[i]=word[i]+32;
}else{
continue;
}
}for(int i=0;i<sen.length();i++){
if(sen[i]<'Z'&&sen[i]>'A'){
sen[i]=sen[i]+32;
}else{
continue;
}
}word=' '+word+' ';
sen=' '+sen+' ';
int n;
if(sen.find(word)==-1){
printf("-1");
}else{
m=sen.find(word);
n=sen.find(word);
while(n!=-1){
s++;
n=sen.find(word,n+1);
}
printf("%d %d",s,m);
}
return 0;
}