C/C++字符串

2023-05-16

字符串读入:

C语言:
包含头文件+定义:

include <cstring>
typedef char ch[LEN];   //定义新类型 字符数组
ch SArray[3];      //三个字符数组组成的数组
char STRING[LEN];
char* STRING2;    //字符指针 与字符数组功能类似

读入(遇到空格则停止):

scanf("%s",STRING); Len=strlen(STRING);

从STRING[1]开始记录(遇到空格则停止):

scanf("%s",STRING+1); Len=strlen(STRING+1);

整行读入:

gets(STRING);

还可以自己编写读入,能按需求调整记录位置,但是耗时较高:

void readstr(char* s)
{
    Len=0;
    char c; c=getchar();
    while (1) 
    {
        if (c=='\n') break;
        s[++Len]=c;
        c=getchar();
    }
}

C++语言:
包含头文件+定义:

#include <string>
string s("string"); //初始化为某一个字符串
string s(n,char);  //初始化为重复n个字符

求字符串长函数:

C语言中 strlen(s)求长原理是从起始位置起逐位比较,直到探测出字符串终止符(’\0’)。 其时间复杂度为O(n)
若字符串没有变化,最好不要重复调用,应该用变量储存起来。
C++中 s.size() 原理相似。

C++ STRING中其他函数:

s.append("string"); //追加字符串

s.substr(POS,LEN); //返回从s[POS]开始连续LEN个字符形成的子串

getline(cin,STRING);//读入整行 成功返回1

s.find(SUBSTRING); //查找子串 有则返回POS 否则返回-1

s.replace(START,LEN,RESTRING); //替换新串
//或者用
{ s.erase(START,LEN);s.insert(START,RESTRING); } //替换新串

s.compare(t); //s和t比较字典序 s>t 返回值>0 | s<t 返回值<0 | s==t 返回值=0

C++ stringstream 用法:

包含头文件+定义:

#include<sstream>
stringstream Tempio;

接着就可以像cin、cout一样输入输出,可用于暂存信息,或进行数据类型之间的转换。

template<class TA,class TB>
TB AtoB(const TA &a)
{
    stringstream st;
    st<<a;
    TB b;
    st>>b;
    return b;
}

//运用
int y=123;
string s1=AtoB<int,string>(y);
string s2("321");
int z=AtoB<string,int>(s2);

其他
有的函数不支持C++的string类型,如printf、system、文件的open等。使用时需要用c_str()转成C风格的字符串。 注意: c_str()返回值为const char* (不可改), 不要用c_str()读入string类型

ofstream fout;
string filename="test";
fout.open((filename+".in").c_str());
...
fout.close();

string s="c++string";
printf("%s",s.c_str());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++字符串 的相关文章

随机推荐