1.sscanf函数
在做一道九度上机题时,突然发现sscanf()函数非常有用,就顺便从网上搜集资料整理一下。
sscanf() 的作用:从一个字符串中读进与指定格式相符的数据.
原型: int sscanf (const char *str,const char * format,……..);
说明: sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果存于对应的参数内。
成功则返回参数数目,失败则返回0。
注意:sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。
这里就举几个经常用到的例子来说明他的用法,便于大家深刻理解他的用法.
例子:
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- int main(){
- char str[100];
- //用法一:取指定长度的字符串
- sscanf(”12345”,“%4s”,str);
- printf(”用法一\nstr = %s\n”,str);
- //用法二:格式化时间
- int year,month,day,hour,minute,second;
- sscanf(”2013/02/13 14:55:34”,“%d/%d/%d %d:%d:%d”,&year,&month,&day,&hour,&minute,&second);
- printf(”用法二\ntime = %d-%d-%d %d:%d:%d\n”,year,month,day,hour,minute,second);
- //用法三:读入字符串
- sscanf(”12345”,“%s”,str);
- printf(”用法三\nstr = %s\n”,str);
- //用法四:%d 和 %*s 加了星号 () 表示跳过此数据不读入. (也就是不把此数据读入参数中)
- sscanf(”12345acc”,“%*d%s”,str);
- printf(”用法四\nstr = %s\n”,str);
- //用法五:取到指定字符为止的字符串。如在下例中,取遇到’+’为止字符串。
- sscanf(”12345+acc”,“%[^+]”,str);
- printf(”用法五\nstr = %s\n”,str);
- //用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。
- sscanf(”12345+acc121”,“%[^a-z]”,str);
- printf(”用法六\nstr = %s\n”,str);
- return 0;
- }
#include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ char str[100]; //用法一:取指定长度的字符串 sscanf("12345","%4s",str); printf("用法一\nstr = %s\n",str); //用法二:格式化时间 int year,month,day,hour,minute,second; sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year,&month,&day,&hour,&minute,&second); printf("用法二\ntime = %d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,second); //用法三:读入字符串 sscanf("12345","%s",str); printf("用法三\nstr = %s\n",str); //用法四:%*d 和 %*s 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中) sscanf("12345acc","%*d%s",str); printf("用法四\nstr = %s\n",str); //用法五:取到指定字符为止的字符串。如在下例中,取遇到'+'为止字符串。 sscanf("12345+acc","%[^+]",str); printf("用法五\nstr = %s\n",str); //用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。 sscanf("12345+acc121","%[^a-z]",str); printf("用法六\nstr = %s\n",str); return 0; }
2.find函数
通常来说,find函数用于寻找某个序列的在string中第一次出现的位置。
find函数有以下四种重载版本:
size_t find (const string& str, size_t pos = 0) const noexcept;
size_t find (const char* s, size_t pos = 0) const;
size_t find (const char* s, size_t pos, size_type n) const;
size_t find (char c, size_t pos = 0) const noexcept;
参数说明:
str/s/c:要寻找的序列,可以是字符串(版本1),也可以是字符串字面值或者说C风格字符串(版本2、3,在版本3中,所寻找的序列是从s[0]开始的前n个字符),也可以是字符(版本4)。
pos:从string的pos位置开始寻找(注意第一个位置是0)。
函数返回序列第一次出现的位置,如果没有找到则返回string::npos。
4.c_str函数
- //标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组
- //主要介绍c_str
- //c_str():生成一个const char*指针,指向以空字符终止的数组。
- //这个数组应该是string类内部的数组
- #include <iostream>
- //需要包含cstring的字符串
- #include <cstring>
- using namespace std;
- int main()
- {
- //string–>char*
- //c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同
- //这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。
- //因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中
- const char *c;
- string s = ”1234”;
- c = s.c_str();
- cout<<c<<endl;
- s = ”abcde”;
- cout<<c<<endl;
- }
//标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组
//主要介绍c_str
//c_str():生成一个const char*指针,指向以空字符终止的数组。
//这个数组应该是string类内部的数组
include <iostream>
//需要包含cstring的字符串
include <cstring>
using namespace std;
int main()
{
//string-->char*
//c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同
//这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。
//因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中
const char *c;
string s = "1234";
c = s.c_str();
cout<<c<<endl;
s = "abcde";
cout<<c<<endl;
}
结果是:
上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd
其实上面的c = s.c_str(); 不是一个好习惯。既然c指针指向的内容容易失效,我们就应该按照上面的方法,那怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)。
//更好的处理为:
- //标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组
- //主要介绍c_str
- //c_str():生成一个const char*指针,指向以空字符终止的数组。
- //这个数组应该是string类内部的数组
- #include <iostream>
- //需要包含cstring的字符串
- #include <cstring>
- using namespace std;
- int main()
- {
- //更好的方法是将string数组中的内容复制出来 所以会用到strcpy()这个函数
- char *c = new char[20];
- string s = ”1234”;
- // c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。
- strcpy(c,s.c_str());
- cout<<c<<endl;
- s = ”abcd”;
- cout<<c<<endl;
- }
//标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组
//主要介绍c_str
//c_str():生成一个const char*指针,指向以空字符终止的数组。
//这个数组应该是string类内部的数组
#include <iostream> //需要包含cstring的字符串 #include <cstring> using namespace std; int main() { //更好的方法是将string数组中的内容复制出来 所以会用到strcpy()这个函数 char *c = new char[20]; string s = "1234"; // c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。 strcpy(c,s.c_str()); cout<<c<<endl; s = "abcd"; cout<<c<<endl; }
4367

被折叠的 条评论
为什么被折叠?



