1、sscanf()
int sscanf(const char *buffer,const char *format,[argument ]...);
buffer存储的数据
format格式控制字符串
argument 选择性设定字符串
sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。
头文件:#include<stdio.h>
返回值:成功则返回参数数目,失败则返回0,错误原因存于errno中。
1. 常见用法。
char buf[512] ;
sscanf("123456 ", "%s", buf);//此处buf是
数组名,它的意思是将123456以%s的形式存入buf中!
printf("%s\n", buf);
结果为:123456
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
结果为:1234
3. 取到指定
字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
结果为:123456
4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf);
结果为:123456abcdedf
当输入: sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);
printf("%s\n",buf);
结果为:123456
5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf);
结果为:123456abcdedf
2、sprintf()
原型:int sprintf( char *buffer, const char *format, [ argument] … );
buffer:
char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]..
.:可选参数,可以是任何类型的数据。
返回值:字符串长度(
strlen)
#include <stdio.h>//某个头文件
int
main ()
/*主函数“整数”类型*/
{
char
buffer [50];
/*“字符”类型的数组,下面共有50个元素。*/
int
n, a=5, b=3;
/*三个变量都为“整数”类型*/
n=
sprintf
(buffer,
"%d plus %d is %d"
, a, b, a+b);
/*赋予数值*/
printf
(
"[%s] is a string %d chars long\n"
,buffer,n);
/*“格式输出”*/
return
0;
/*“返回 零”
也就是程序正常退出*/
}
输出结果:
#include <stdio.h>//某个头文件
int
main ()
/*主函数“整数”类型*/
{
char
buffer [50];
/*“字符”类型的数组,下面共有50个元素。*/
int
n, a=5, b=3;
/*三个变量都为“整数”类型*/
n=
sprintf
(buffer,
"%d plus %d is %d"
, a, b, a+b);
/*赋予数值*/
printf
(
"[%s] is a string %d chars long\n"
,buffer,n);
/*“格式输出”*/
return
0;
/*“返回 零”
也就是程序正常退出*/
}
|
[5 plus 3 is 8] is a string 13 chars long
|
3、strstr()
从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。
函数原型:extern char *strstr(char *str1, char *str2);
返回值:返回该位置的
指针,如找不到,返回空指针。
char
str[]=
"1234 xyz"
;
char
* str1=
strstr
(str,
"34"
);
cout<<str1<<endl;
显示: 34 xyz
4、itoa()
char
str[]=
"1234 xyz"
;
char
* str1=
strstr
(str,
"34"
);
cout<<str1<<endl;
|
itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器(如Windows上的)通常在<stdlib.h>头文件中包含这个函数。功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。
char
*itoa(
int
value,
char
*string,
int
radix);
#include <stdlib.h>
#include <stdio.h>
int
main()
{
int
number = 123456;
char
string[25];
itoa(number, string, 10);
printf
(
"integer = %d string = %s\n"
, number, string);
return
0;
}
5、atoi()
6、C++的substr()(string 类型)
char
*itoa(
int
value,
char
*string,
int
radix);
|
#include <stdlib.h>
#include <stdio.h>
int
main()
{
int
number = 123456;
char
string[25];
itoa(number, string, 10);
printf
(
"integer = %d string = %s\n"
, number, string);
return
0;
}
basic_string substr(
size_type _Off = 0,size_type _Count = npos) const;
功能:从一个字符串复制一个从指定位置开始,并具有指定长度的子字符串。
#include <string>
#include <iostream>
using
namespace
std;
int
main( )
{
string str1 (
"Heterological paradoxes are persistent."
);
cout <<
"The original string str1 is: "
<< endl;
cout << str1 << endl;
basic_string <
char
> str2 = str1.substr ( 6 , 7 );
cout <<
"The substring str1 copied is: "
<< str2 << endl;
basic_string <
char
> str3 = str1.substr ( );
cout <<
"The default substring str3 is: "
<< endl;
cout << str3 << endl;
cout <<
"which is the entire original string."
<< endl;
return
0;
}
输出结果:
The original string str1 is:
Heterological paradoxes are persistent.
The substring str1 copied is: logical
The default substring str3 is:
Heterological paradoxes are persistent.
which is the entire original string.
7、C++的append()(string 类型)
#include <string>
#include <iostream>
using
namespace
std;
int
main( )
{
string str1 (
"Heterological paradoxes are persistent."
);
cout <<
"The original string str1 is: "
<< endl;
cout << str1 << endl;
basic_string <
char
> str2 = str1.substr ( 6 , 7 );
cout <<
"The substring str1 copied is: "
<< str2 << endl;
basic_string <
char
> str3 = str1.substr ( );
cout <<
"The default substring str3 is: "
<< endl;
cout << str3 << endl;
cout <<
"which is the entire original string."
<< endl;
return
0;
}
|
8、strcpy() / strncpy() / strcat() /
9、strtok
分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。
原型:
char *strtok(char s[], const char *delim);
功能:
分解字符串为一组字符串。s为要分解的字符串,delim为
分隔符字符串。
例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。
返回值:
从s开头开始的一个个被分割的串。当没有被分割的串时则返回字符串首地址。
所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。
使用:
strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果
要保持原字符串的完整,可以使用strchr和sscanf的组合等。
10、strchr
strchr函数原型:extern char *strchr(const char *s,char c);查找字符串s中首次出现字符c的位置。
const char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
头文件:#include <string.h>
功能:查找
字符串s中首次出现字符c的位置
返回值:Returns the address of the first occurrence of the character in the string if successful, or NULL otherwise
1、字符变量=cin.get() 与>>不同,get函数可以接受任何字符,包括空白字符
2、cin.getline(字符数组,数组长度,结束标记) 它从终端接受一个包含任意字符的字符串,直到遇到了指定的结束标记或到达了数组长度减1(因为字符串最后一个字符必须是‘\0’,必须为\0预留空间,结束标记符也可以不指定,此时默认回车为结束标记)
3、字符处理函数头文件<cstring> ------ 这些都是针对char ch[]或char *ch
strcpy(dst,src) 将字符串从src复制到dst,函数的返回值是dst的地址 ======= strcpy(const char*,const char*)
strnpy(dst,src,n) 至多从src复制n个字符到dst,函数返回值为dst的地址
strcat(dst,src) 将src拼接到dst后,返回dst的地址
strncat(dst,src,n) 从src至多取n个字符拼接到dst后,返回值是dst的地址
strlen(s) 返回字符串s的长度,即字符串中的字符个数 ========== strlen(const char*)
strcmp(s1,s2) 比较s1和s2,如果s1>s2返回整数,s1==s2返回0,s1<s2返回负数
strncmp(s1,s2,n) 与上面类似,但至多比较n个字符
strchr(s,ch) 返回一个指向s中第一个出现字符ch的地址
strrchr(s,ch) 返回一个指向s中最后一次出现字符ch的地址
strstr(s1,s2) 返回一个指向s1中第一次出现字符串s2的地址
char* ch 和char ch1[] 的长度都可以用strlen(ch|ch1)来求得,但长度不包括‘\0’了,不过sizeof(ch1)的结果就包括‘\0’了 strlen(const char*)
4、extern 可以调用别的文件中的全局变量,但如果此用static修饰的变量只能用于本源文件,不能用extern被别的源文件调用
5、const int *p=&x :是一个指向的内容是常量的指针变量,由于使用了const说明指针指向的内容是一个常量,因而不能修改它指向的内容,如*p=30;就会报错“左值是一个常量” ,但由于p是一个 普通的指针变量,我们可以让指针指向另一个地址,列如p=&y
6、int *const p=&x :指针本身是一个常量,他固定指向某一变量,因此它本身的值不能变,但他指向的地址中的值是可变的 *p=30是对的,但p=&y是错误的
2、cin.getline(字符数组,数组长度,结束标记) 它从终端接受一个包含任意字符的字符串,直到遇到了指定的结束标记或到达了数组长度减1(因为字符串最后一个字符必须是‘\0’,必须为\0预留空间,结束标记符也可以不指定,此时默认回车为结束标记)
3、字符处理函数头文件<cstring> ------ 这些都是针对char ch[]或char *ch
strcpy(dst,src) 将字符串从src复制到dst,函数的返回值是dst的地址 ======= strcpy(const char*,const char*)
strnpy(dst,src,n) 至多从src复制n个字符到dst,函数返回值为dst的地址
strcat(dst,src) 将src拼接到dst后,返回dst的地址
strncat(dst,src,n) 从src至多取n个字符拼接到dst后,返回值是dst的地址
strlen(s) 返回字符串s的长度,即字符串中的字符个数 ========== strlen(const char*)
strcmp(s1,s2) 比较s1和s2,如果s1>s2返回整数,s1==s2返回0,s1<s2返回负数
strncmp(s1,s2,n) 与上面类似,但至多比较n个字符
strchr(s,ch) 返回一个指向s中第一个出现字符ch的地址
strrchr(s,ch) 返回一个指向s中最后一次出现字符ch的地址
strstr(s1,s2) 返回一个指向s1中第一次出现字符串s2的地址
char* ch 和char ch1[] 的长度都可以用strlen(ch|ch1)来求得,但长度不包括‘\0’了,不过sizeof(ch1)的结果就包括‘\0’了 strlen(const char*)
4、extern 可以调用别的文件中的全局变量,但如果此用static修饰的变量只能用于本源文件,不能用extern被别的源文件调用
5、const int *p=&x :是一个指向的内容是常量的指针变量,由于使用了const说明指针指向的内容是一个常量,因而不能修改它指向的内容,如*p=30;就会报错“左值是一个常量” ,但由于p是一个 普通的指针变量,我们可以让指针指向另一个地址,列如p=&y
6、int *const p=&x :指针本身是一个常量,他固定指向某一变量,因此它本身的值不能变,但他指向的地址中的值是可变的 *p=30是对的,但p=&y是错误的