一些简单函数的作用

来源:互联网 发布:树莓派gpio python 编辑:程序博客网 时间:2024/06/06 00:45

1.sscanf函数

在做一道九度上机题时,突然发现sscanf()函数非常有用,就顺便从网上搜集资料整理一下。

       sscanf() 的作用:从一个字符串中读进与指定格式相符的数据.

原型: int sscanf (const char *str,const char * format,……..);

说明: sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果存于对应的参数内。

         成功则返回参数数目,失败则返回0。

注意:sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。

这里就举几个经常用到的例子来说明他的用法,便于大家深刻理解他的用法.

例子:

[cpp] view plain copy
print?
  1. #include<stdio.h>  
  2. #include<stdlib.h>  
  3. #include<string.h>  
  4.   
  5. int main(){  
  6.     char str[100];  
  7.     //用法一:取指定长度的字符串  
  8.     sscanf(”12345”,“%4s”,str);  
  9.     printf(”用法一\nstr = %s\n”,str);  
  10.   
  11.     //用法二:格式化时间  
  12.     int year,month,day,hour,minute,second;  
  13.     sscanf(”2013/02/13 14:55:34”,“%d/%d/%d %d:%d:%d”,&year,&month,&day,&hour,&minute,&second);  
  14.     printf(”用法二\ntime = %d-%d-%d %d:%d:%d\n”,year,month,day,hour,minute,second);  
  15.   
  16.     //用法三:读入字符串  
  17.     sscanf(”12345”,“%s”,str);  
  18.     printf(”用法三\nstr = %s\n”,str);  
  19.   
  20.     //用法四:%d 和 %*s 加了星号 () 表示跳过此数据不读入. (也就是不把此数据读入参数中)  
  21.     sscanf(”12345acc”,“%*d%s”,str);  
  22.     printf(”用法四\nstr = %s\n”,str);  
  23.   
  24.     //用法五:取到指定字符为止的字符串。如在下例中,取遇到’+’为止字符串。  
  25.     sscanf(”12345+acc”,“%[^+]”,str);  
  26.     printf(”用法五\nstr = %s\n”,str);  
  27.   
  28.     //用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。  
  29.     sscanf(”12345+acc121”,“%[^a-z]”,str);  
  30.     printf(”用法六\nstr = %s\n”,str);  
  31.     return 0;  
  32. }  
#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。

3.substr和assign函数-
C++中substr()函数用法
substr(起始位置,长度)

#include<string>
#include<iostream>
using namespace std;
main()
{
string s(“12345asdf”);
string a=s.substr(0,4);   //获得字符串s中 从第0位开始的长度为4的字符串
cout<<a<<endl;
}

输出结果为:
1234

assign()函数:
函数以下列方式赋值:

用str为字符串赋值, 
用str的开始num个字符为字符串赋值, 
用str的子串为字符串赋值,子串以index索引开始,长度为len 
用num个字符ch为字符串赋值. 
例如以下代码:
    string str1, str2 = “Warand Peace”;
    str1.assign( str2, 4, 3);       //str2 字符串的第4个字符位置开始赋值给str1,长度为3个字符
    cout<< str1<< endl;

显示:
    and


赋值(assign) 
语法: 
basic_string&assign( const basic_string &str);
basic_string&assign( const char *str );
basic_string&assign( const char *str, size_type num );
basic_string&assign( const basic_string &str,size_type index, size_type len );
basic_string&assign( size_type num, char ch );

4.c_str函数

[cpp] view plain copy
print?
  1. //标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组  
  2. //主要介绍c_str  
  3. //c_str():生成一个const char*指针,指向以空字符终止的数组。  
  4. //这个数组应该是string类内部的数组  
  5. #include <iostream>  
  6. //需要包含cstring的字符串  
  7. #include <cstring>  
  8. using namespace std;  
  9.   
  10. int main()  
  11. {  
  12.     //string–>char*  
  13.     //c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同  
  14.   
  15.     //这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。  
  16.     //因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中  
  17.     const char *c;  
  18.     string s = ”1234”;  
  19.     c = s.c_str();  
  20.     cout<<c<<endl;  
  21.     s = ”abcde”;  
  22.     cout<<c<<endl;  
  23. }  
//标准库的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&lt;&lt;c&lt;&lt;endl;s = "abcde";cout&lt;&lt;c&lt;&lt;endl;

}

结果是:


上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd

其实上面的c = s.c_str(); 不是一个好习惯。既然c指针指向的内容容易失效,我们就应该按照上面的方法,那怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)。


//更好的处理为:

[cpp] view plain copy
print?
  1. //标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组  
  2. //主要介绍c_str  
  3. //c_str():生成一个const char*指针,指向以空字符终止的数组。  
  4. //这个数组应该是string类内部的数组  
  5. #include <iostream>  
  6. //需要包含cstring的字符串  
  7. #include <cstring>  
  8. using namespace std;  
  9.   
  10. int main()  
  11. {  
  12.     //更好的方法是将string数组中的内容复制出来 所以会用到strcpy()这个函数  
  13.     char *c = new char[20];  
  14.     string s = ”1234”;  
  15.     // c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。  
  16.     strcpy(c,s.c_str());  
  17.     cout<<c<<endl;  
  18.     s = ”abcd”;  
  19.     cout<<c<<endl;  
  20. }  
//标准库的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;}


原创粉丝点击