猿问
下载APP

请问一下string类的left函数是如何使用的?

string类的left函数是如何使用的


30秒到达战场
浏览 101回答 3
3回答

一只萌萌小番薯

1.string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常2.string类的字符操作:const char &operator[](int n)const;const char &at(int n)const;char &operator[](int n);char &at(int n);operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。const char *data()const;//返回一个非null终止的c字符数组const char *c_str()const;//返回一个以null终止的c字符串int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目3.string的特性描述:int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)int max_size()const; //返回string对象中可存放的最大字符串的长度int size()const; //返回当前字符串的大小int length()const; //返回当前字符串的长度bool empty()const; //当前字符串是否为空void resize(int len,char c);//把字符串当前大小置为len,并用字符c填充不足的部分string类的输入输出操作:string类重载运算符operator>>用于输入,同样重载运算符operator<<用于输出操作。函数getline(istream &in,string &s);用于从输入流in中读取字符串到s中,以换行符'\n'分开。4.string的赋值:string &operator=(const string &s);//把字符串s赋给当前字符串string &assign(const char *s);//用c类型字符串s赋值string &assign(const char *s,int n);//用c字符串s开始的n个字符赋值string &assign(const string &s);//把字符串s赋给当前字符串string &assign(int n,char c);//用n个字符c赋值给当前字符串string &assign(const string &s,int start,int n);//把字符串s中从start开始的n个字符赋给当前字符串string &assign(const_iterator first,const_itertor last);//把first和last迭代器之间的部分赋给字符串5.string的连接:string &operator+=(const string &s);//把字符串s连接到当前字符串的结尾string &append(const char *s); //把c类型字符串s连接到当前字符串结尾string &append(const char *s,int n);//把c类型字符串s的前n个字符连接到当前字符串结尾string &append(const string &s); //同operator+=()string &append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串的结尾string &append(int n,char c); //在当前字符串结尾添加n个字符cstring &append(const_iterator first,const_iterator last);//把迭代器first和last之间的部分连接到当前字符串的结尾6.string的比较:bool operator==(const string &s1,const string &s2)const;//比较两个字符串是否相等运算符">","<",">=","<=","!="均被重载用于字符串的比较;int compare(const string &s) const;//比较当前字符串和s的大小int compare(int pos, int n,const string &s)const;//比较当前字符串从pos开始的n个字符组成的字符串与s的大小int compare(int pos, int n,const string &s,int pos2,int n2)const;//比较当前字符串从pos开始的n个字符组成的字符串与s中pos2开始的n2个字符组成的字符串的大小int compare(const char *s) const;int compare(int pos, int n,const char *s) const;int compare(int pos, int n,const char *s, int pos2) const;compare函数在>时返回1,<时返回-1,==时返回0string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串string的交换:void swap(string &s2); //交换当前字符串与s2的值。

杨魅力

#include<iostream>#include<string.h>#define SIZE 20using namespace std;class String{private:int size; //重载构造函数创建字符串大小char *s;int f[SIZE]; //失败函数数组public:String(); //默认情况下创建大小为SIZE大小的字符串数组String(const char *p); //创建大小和p相同的字符串数组并把p赋给新创建的字符串String(const String &s);~String() {delete [] s;}int judge() {return strlen(s);} // 检查字符串的实际长度void copy(const char *p); //拷贝p的字符串bool Find(int i,char &ch); //返回下标为i的字符bool Find(int left,int right,char *p);//返回从left~right的字符串bool Delete(int i); //删除小标为i的字符,成功返回真bool Delete(int left,int len); //重载函数删除下标left之后的len个字符int BF_Seek(int i, char *p); //查找字符串是否存在子串p,为真,返回在母串中第一次出现的位置,没有返回-1int KMP_Seek(int i,char *p); //KMP算法查找优化BF算法void Fail(const char *p); //失败函数void disp();};String::String(const String &x){size=x.size;s=new char[size+1];}String::String(){size=SIZE;s=new char[size+1];}String::String(const char *p){size=strlen(p);s=new char[size+1];strcpy(s,p);}void String::copy(const char *p){strcpy(s,p);}bool String::Find(int i,char &ch){if(i<0 || i>=judge())return false;ch=s[i];return true;}bool String::Find(int left,int right,char *p){if(left>right || left<0 || right>=judge()) //越界检查return false;int k=0;for(int i=left;i<=right;i++)p[k++]=s[i];p[k]='\0';return true;}bool String::Delete(int i){int j;if(i<0||i>=size)return false;for( j=i;j<judge();j++)s[j]=s[j+1];s[j]='\0';return true;}bool String::Delete(int left,int len){if(left<0 || len>judge()-left)return false;int i,k=left+len;for( i=left;i<=judge()-len;i++)s[i]=s[k++];s[i]='\0';return true;}int String::BF_Seek(int i,char *p){int n=strlen(p);int k=i;int j=0;while(j<n && i<judge()){if(p[j] == s[i]){j++;i++;}else{j=0;i=k++;}}if(j == n) return i-n;return -1;}void String::Fail(const char *p){int n=strlen(p); //获取字串的长度int j=0,k=-1;f[0]=-1;while(j<n){if(k==-1 || p[j]==p[k]) //如果k=-1或者p[j]=p[k]则k和j各加一{k++;j++;f[j]=k;}elsek=f[k]; //其他情况下k回溯到f[k]}}int String::KMP_Seek(int i, char *p){Fail(p); //失败函数计算f[j]的值int m=judge(); //获取姆串的长度int n=strlen(p); //获取字串的长度int j=0; // j初始化为0while(i<m && j<n){if(j==-1 || s[i]==p[j]) //1. 如果j=-1或者s[i]=p[j]则j和i各扩展一位{i++;j++;}else //2. 其他情况下j回溯到f[j]j=f[j];}if(j == n) return i-n;return -1;}void String::disp(){int n=judge();for(int i=0;i<n;i++)cout<<s[i]<<" ";cout<<endl;}int main(){char ch, c[6],temp[5];String s1("abcabcaalkgjl"),s2;strcpy(c,"aalk");cout<<"返回元素下标为1~5的元素"<<endl;s1.Find(1,5,temp);cout<<temp<<endl;cout<<"显示字符串数组"<<endl;s1.disp();return 0;}这是我自己做的给你参考一下,虽然和标准库比起来差了十万八千里

123456qqq

是不是这样?Private&nbsp;Sub Form_Load()Dim dtp1 As String, dtm1 As StringForm1.AutoRedraw = TrueForm1.FontSize = 20Form1.ForeColor = &H7700FF'Form1.BorderStyle = 1dtp1 = "2003-1-10"dtm1 = "8:30:00"Print&nbsp;Left(dtp1, 4) & Right(Left(dtp1, 7), 2) & Right(dtp1, 2) &&nbsp;Left(dtm1, 2); Left(Right(dtm1, 5), 2)End&nbsp;Sub
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答