C语言中的字符串函数

1、sscanf()

sscanf() - 从一个 字符串 中读进与指定格式相符的数据。
int sscanf(  const  char *, const char *, ...);
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
2. 取指定长度的 字符串。如在下例中,取最大长度为4 字节的字符串。
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] … );

bufferchar型指针,指向将要写入的字符串的缓冲区。
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; /*“返回 零”
       也就是程序正常退出*/
}
输出结果:
[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()

itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器(如Windows上的)通常在<stdlib.h>头文件中包含这个函数。功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。

char *itoa( int value, char *string, int radix);
int value 被转换的整数,char *string 转换后储存的 字符 数组,int radix 转换进制数,如2,8,10,16 进制等
#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 类型)

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 类型)

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的位置
说明:返回首次出现c的位置的 指针,返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置,如果s中不存在c则返回 NULL
返回值: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是错误的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值