关于字符串用法的一些总结

字符数组和字符串的一些总结

1.C语言字符串输入输出操作

输入

●scanf("%s",line):读到空格结束//此处的line不用加&,因为line为数组名,即地址。

●gets():只能输入字符串,一次读入一行,读到换行符结束,但换行符会被丢弃,然后在末尾添加’\0’字符。
//不要char*p,然后gets( p ),这是错误的,因为p没有指向有效的内存,它可能指向任何非法地址

输出:

●puts():自动换行且只能输出字符串
●printf():正常输出

●getchar与putchar
两个函数的声明分别为:

	int getchar(void);
	int putchar(int _Character);

getchar有一个int型的返回值。当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。

2.c++的标准库函数中的输入

●getline
声明:

istream &getline( char *buffer, streamsize num, char delim );
istream &getline( char *buffer, streamsize num );

功能:读入字符,直到遇到终结符delim时读入结束

#include<iostream>
#include<string>
using namespace std;
int main(){
    
    
	string s;
	getline(cin,s,'!');
	cout<<s;
	return 0;
}
//键入:wo!aini
//输出:wo

●.cin.getline();
cin.getline(char *cha,int num,char f);
向cha中输入num个字符,输入过程中达到num-1个数或者提前遇到f字符,输入结束。

#include<iostream>
#include<string>
using namespace std;
 
int main(){
    
    
	char c[100];
	cin.getline(c,10,'!');
	cout<<c;
	return 0;
}
//键入:wo!aini
//输出:wo
//键入:woainiwoaini
//输出:woainiwoa

3.c语言中常用的字符串函数

字符串拷贝函数 strcpy()
原型:char strcpy(char dest, const char *src);
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间,返回指向dest的指针。
字符串比较函数 strcmp()
原型:int strcmp(const char *s1,const char * s2)
功能:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。当s1<s2时,返回为负数;当s1=s2时,返回值= 0;当s1>s2时,返回正数。
●.求字符串长度 strlen()
原型:int strlen(const char *s);
功能:计算给定字符串的长度(不包括结尾的NULL)
●.字符串拼接 strcat()
原型:char *strcat(char *dest, const char src)
功能:把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除
dest原来末尾的“\0”),返回指向dest的指针
●字符串转成大小写strupr,strlwr
原型:char *strupr(char *s);char *strlwr(char *s);
功能:整个字符串的大小写转换
●求子串strstr()
原型:extern char *strstr(char *str1, const char *str2);
功能:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
●字符串分割
原型:char * strtok(char * str, const char * delim);
功能:从str中逐个抽取出被字符串delim中的字符分隔 开的若干个子串。(strtok()中的第一个参数为static char * start ,故在后续调用strtok()函数是传入的第一个从参数为NULL)
举例:strtok()函数用法举例

4.c++ 的string类

1.特性:

1.string类是模板类:typedef basic_string string;
2.string支持流读取运算符
3.string支持getline函数
4.两个字符串之间用=赋值
5.string中用+可以直接连接字符串

2.成员函数:

●length()
●assign():用于对字符串赋值

    string s="12345";
    s.assign(s,1,2);
    cout<<s<<endl;//s="23"

●compare():

  s1的[x1,y1]与s2的[x2,y2]比较
  s1.compare(x1,y1,s2,x2,y2);
  s1的[x1,y1]与s2比较
  s1.compare(x1,y1,s2);

●append()
●swap();
●substr():

  string s1="abcdefg",s2;
  s2=s1.substr(1,3);
  cout<<s2<<endl;//s2="bcd"
  s2=s1.substr(2);
  cout<<s2<<endl;//s2="cdefg"

●find()
●erase()
●replace()
●insert()
●c_str();
●data();

3. 数字字符串互换

5.字符串与字符数组之间的相互转化

●字符串转化为字符数组

下面介绍c_str()函数的使用;
c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.
我们看这个代码

       char* c; 
       string s="abcdefg"; 
   	   c = s.c_str();

这个编译器会报[Error] invalid conversion from ‘const char*’ to ‘char*’

因为 c_str()返回的是一个分配给const char的地址,其内容已设定为不可变更,如果再把此地址赋给一个可以变更内容的char变量,就会产生冲突.
但是如果放入函数调用,或者直接输出,因为这些函数和输出都是把字符串指针作为 const char*引用的,所以不会有问题。
因此正确的写法为

char c[10];
string s="abcdefg";
strcpy(c,s.c_str());

字符数组转换成字符串可直接赋值

猜你喜欢

转载自blog.csdn.net/wenyisir/article/details/105589350