sscanf函数
//取出前4个字符1234
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
sscanf("12345","%4s",str);
printf("%s\n",str);
return 0;
}
//字符串读入
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
sscanf("12345123","%s",str);
printf("%s\n",str);
return 0;
}
//(*)表示跳过此数据不读入
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
sscanf("1234abcd","%*d%s",str);
printf("%s\n",str);
return 0;
}
//abcd
//取到指定字符为止的字符串。
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
sscanf("1234+abc","%[^+]",str);
//把+号变成空格就变成取到空格位置,也可以取到小写字母"%[^a-z],把抑或符号去掉"%[1-9a-z]就变成只取数字和小写字母的第一个连续字符串。
printf("%s\n",str);
return 0;
}
//1234
strtok函数
函数原型:
char* strtok (char* str,constchar* delimiters );
函数功能:
切割字符串,将str切分成一个个子串
函数参数:
str:在第一次被调用的时间str是传入需要被切割字符串的首地址;在后面调用的时间传入NULL。
delimiters:表示切割字符串(字符串中每个字符都会 当作分割符)。
函数返回值:
当s中的字符查找到末尾时,返回NULL;
如果查不到delimiter所标示的字符,则返回当前strtok的字符串的指针
对一些特殊输入的题目常常可以结合sscanf和strtok比如输入类型用某个符号分割。把他们存入数组。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[1050];
int b[1050];
char s[10050];
int main()
{
cin>>s;
int n=0;
char *p=strtok(s,",");
while(p)
{
sscanf(p,"%d",&a[++n]);
p=strtok(NULL,",");
}
return 0;
}
scanf输入string类型
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
string a;
a.resize(100); //需要预先分配空间
scanf("%s", &a[0]);
printf("%s\n", a.c_str());
return 0;
}