字符串读入:
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());