Один, струна C
\
В языке C нет строкового типа данных, вы можете использовать массив символов, оканчивающийся символом NULL ('\0'), для хранения строк. \
Только массивы символов, оканчивающиеся нулевым символом, являются строками C, в противном случае это просто обычные массивы символов C.
\
Связанные функции находятся в заголовочном файле
Примечание:
\
1. Используйтемассив символовC может использоваться, когда строка памяти определяет, что "=" инициализируется, но тогда нельзя использовать "=" C, а затем присваивать строку. Переназначение доступного strcpy(). \
Также доступно в Cуказатель символаЧтобы получить доступ к строке, указатель символа указывает на адрес первого элемента массива строк для доступа.
Обратите внимание на следующие примеры примечаний:
\
char a[11] = "kobe";//字符串的初始化
//a="kobebryant"不能如此赋值!!
strcpy(a,"kobecryant");//字符串的赋值
a[4]='b';
//获取字符串的长度,不包括'\0'在内
int n=strlen(a);
printf("%s\n",a);
char *b = "kobe mvp!";
b="kobe 24mvp!!";//指针可以这样赋值!!
//b[7]='g';错误!
printf("%s\n",b);
\
2. Некоторые распространенные варианты использования функций:
#include<stdio.h>
#include<string.h>
int main(){
char s1[]="kobe is FMVP";
char s2[20]="num.24";
char s3[]="num.08";
char s4[20],*p;
printf("s1现在是:%s\n",s1);
printf("s2现在是:%s\n",s2);
printf("s3现在是:%s\n",s3);
printf("s4现在是:%s\n\n",s4);
// int strlen(char *str)
printf("s1长度:%d\ts2长度:%d\n\n",strlen(s1),strlen(s2));
//串拷贝 char *strcpy(char *str1,char *str2)
strcpy(s4,s2);
printf("s2赋值s4后:%s\n\n",s4);
//串连接 char *strcat(char *str1,char*str2)
printf("s1接在s2后:%s\n\n",strcat(s2,s1));
//注意:如果使用字符数组存放字符串,strcat函数并不检查第一个数组是否能够容纳第二个字符串,
//这样多出来的字符串就会溢出到相邻的存储单元而出现问题。
//串比较 int strcmp(char *str1,char *str) //比较的是对应字符的ASCII码值,如果str1>str2,返回1
printf("%d\t%d\t%d\n\n",strcmp(s2,s3),strcmp(s2,s2),strcmp(s3,s2));
//串定位char *strchr(char *str,char ch)
p=strchr(s1,'M'); //找到返回字符在字串中的位置,否则返回-1
strcpy(p,s2);
printf("找到s1的第一次出现'M'的位置,把s2接上后:%s\n",s1);
return 0;
}
Результат вышеуказанной операции:
\
\
Во-вторых, строки C++
\
Строка не является базовым типом самого языка C++, это строковый класс, объявленный в стандартной библиотеке C++, который можно использовать для определения объектов. Каждая строковая переменная является объектом класса string. Чтобы использовать строковый тип, мы должны включить заголовок
\
1. Декларация и инициализация
string Str;
Приведенное выше объявление не передает параметры, поэтому конструктор строки по умолчанию используется напрямую.Что делает эта функция, так это инициализирует Str пустой строкой.
Конструктор и деструктор класса String выглядят следующим образом:
string s1
string s2(s1)
string s2=s1
string s3("value")
string s3="value"
string s(num,'c') // Генерируем строку, содержащую num c символов
2. Вход
(1) Метод 1:
cin>>s;
cout<<s<<endl;
Пробелы будут игнорироваться, считываться от непробелов до конца пробелов, пробелы относятся к пробелам, новым строкам, табуляциям и т. д.
(2) Метод 2:
Используйте функцию getline для сохранения пробелов до тех пор, пока при каждом чтении строки не будет встречаться символ новой строки.
Например:\
#include<iostream>
#include<string>
int main(){
std::string line;
while(getline(std::cin,line))
std::cout<<"input: "<<line<<std::endl;
return 0;
}
\
3. Функции работы с объектом (разобраны онлайн, но не полностью протестированы)
Случайное чтение:
const char &operator[](int n)const;
const char &at(int n)const;
char &operator[](int n);
char &at(int n);
#include<iostream>
#include<string>
using namespace std;
int main(){
string s="kobe bryant",s2;
cout<<s.operator[](2)<<endl;
cout<<s.at(2)<<endl;
cout<<s[2]<<endl;
// cout<<s.at(20)<<endl;
cout<<s.operator[](20)<<endl;
return 0;
}
\
И оператор [] и at() возвращают символ в n-й позиции в текущей строке, но функция at обеспечивает проверку диапазона и выдает исключение out_of_range при выходе за границы, а оператор нижнего индекса [] не предоставляет доступ для проверки.
Атрибуты:
int capacity()const; // Возвращаем текущую емкость (то есть количество элементов в строке, которые можно сохранить без увеличения памяти)
int max_size()const; // Возвращаем максимальную длину строки, которую можно сохранить в строковом объекте
int size()const; // Возвращаем размер текущей строки
int length()const; //возвращаем длину текущей строки
bool empty()const; // является ли текущая строка пустой
void resize(int len,char c);//Установите текущий размер строки равным len и заполните недостающую часть символом c
Назначение:
string &operator=(const string &s);//Присвоить строку s текущей строке
string &assign(const char *s);//Назначить с типом c string s
string &assign(const char *s,int n);//Назначить n символов, начиная со строки c s
string &assign(const string &s);//Присвоить строку s текущей строке
string &assign(int n,char c);//Назначить n символов c текущей строке
string &assign(const string &s,int start,int n);//Назначить n символов, начиная с start в строке s, текущей строке
string &assign(const_iterator first,const_itertor last);//Назначаем часть между первым и последним итераторами строке
Объединение:
string &operator+=(const string &s);//Соединяем строку s с концом текущей строки
string &append(const char *s); // Соединяем строку s типа c с концом текущей строки
string &append(const char *s,int n);//Соединяем первые n символов строки c-типа s с концом текущей строки
String & Append (Const String & s); // То же, что и оператор + = ()
String & Append (const string & s, int n); // Соединяем N символов из POS S с концом текущей строки из POS S
string &append(int n,char c); //Добавить n символов c в конец текущей строки
string &append(const_iterator first,const_iterator last);//Соединяем часть между итератором first и last с концом текущей строки
сравнивать:
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; // Сравнивает текущую строку из N символов, начиная с POS и размером S
int compare(int pos, int n,const string &s,int pos2,int n2)const;//Сравнить строку, состоящую из n символов, начиная с pos, с символом, состоящим из n2 символов, начиная с pos2, в размере строки s
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;
Функция сравнения возвращает 1 при >, -1 при
Подстрока:
string substr(int pos = 0,int n = npos) const;//Возвращает строку из n символов, начиная с pos
обмен:
void swap(string &s2); // поменять местами текущую строку и значение s2
Находить:
int find(char c, int pos = 0) const;//Начнем с pos, чтобы найти позицию символа c в текущей строке
int find(const char *s, int pos = 0) const;//Начнем с pos, чтобы найти позицию строки s в текущей строке
int find(const char *s, int pos, int n) const;//Начнем с pos, чтобы найти позицию первых n символов в строке s в текущей строке
int find(const string &s, int pos = 0) const;//Начнем с pos, чтобы найти позицию строки s в текущей строке
//Вернуть местоположение, если поиск увенчался успехом, и вернуть значение string::npos, если поиск не удался
int rfind(char c, int pos = npos) const;//Начнем с pos и ищем позицию символа c в текущей строке сзади вперед
int rfind(const char *s, int pos = npos) const;
int rfind(const char *s, int pos, int n = npos) const;
int rfind(const string &s,int pos = npos) const;
// начать с pos, чтобы найти положение строки, состоящей из первых n символов в строке s в текущей строке сзади к фронту, успешно верните позицию и верните значение String :: NPOS, когда он не удается
int find_first_of(char c, int pos = 0) const;//Начнем с pos, чтобы найти первое вхождение символа c
int find_first_of(const char *s, int pos = 0) const;
int find_first_of(const char *s, int pos, int n) const;
int find_first_of(const string &s,int pos = 0) const;
//Начнем с pos, чтобы найти позицию первого символа в массиве, состоящем из первых n символов s в текущей строке. Если поиск не удался, вернуть string::npos
int find_first_not_of(char c, int pos = 0) const;
int find_first_not_of(const char *s, int pos = 0) const;
int find_first_not_of(const char *s, int pos,int n) const;
int find_first_not_of(const string &s,int pos = 0) const;
//Находим позицию первого символа, которого нет в строке s из текущей строки, если не получается, возвращаем string::npos
int find_last_of(char c, int pos = npos) const;
int find_last_of(const char *s, int pos = npos) const;
int find_last_of(const char *s, int pos, int n = npos) const;
int find_last_of(const string &s,int pos = npos) const;
int find_last_not_of(char c, int pos = npos) const;
int find_last_not_of(const char *s, int pos = npos) const;
int find_last_not_of(const char *s, int pos, int n) const;
int find_last_not_of(const string &s,int pos = npos) const;
//find_last_of и find_last_not_of аналогичны find_first_of и find_first_not_of, но смотрят снизу вверх
заменять:
string &replace(int p0, int n0,const char *s);//удалить n0 символов, начиная с p0, затем вставить строку s в p0
string &replace(int p0, int n0,const char *s, int n);//удалить n0 символов, начиная с p0, затем вставить первые n символов строки s в p0
string &replace(int p0, int n0,const string &s);//удалить n0 символов, начиная с p0, затем вставить строку s в p0
string &replace(int p0, int n0,const string &s, int pos, int n);//удалить n0 символов, начиная с p0, затем вставить n символов, начиная с pos, в строку s в точке p0
string &replace(int p0, int n0,int n, char c);//удалить n0 символов, начиная с p0, затем вставить n символов c в p0
string &replace(iterator first0, iterator last0,const char *s);//Заменяем часть между [first0, last0) строкой s
string &replace(iterator first0, iterator last0, const char *s, int n);//Заменяем часть между [first0, last0) первыми n символами s
string &replace(iterator first0, iterator last0,const string &s);//Заменить часть между [first0, last0) строкой s
string &replace(iterator first0, iterator last0,int n, char c);//Заменить часть между [first0, last0) n символами c
string &replace(iterator first0, iterator last0, const_iterator first, const_iterator last);//Заменяем часть между [first0, last0] строкой между [first, last)
Вставлять:
string &insert(int p0, const char *s);
string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);
// Первые 4 функции вставляют первые n символов, начиная с pos, в строку s в позиции p0
string &insert(int p0, int n, char c);//Эта функция вставляет n символов c в позицию p0
iterator insert(iterator it, char c);//Вставляем в него символ c, возвращаем позицию итератора после вставки
void insert(iterator it, const_iterator first, const_iterator last);//Вставить символы между [first, last] в нем
void insert(iterator it, int n, char c);//Вставляем в него n символов c
Удалить:
iterator erase(iterator first, iterator last);//Удалить все символы между [first, last], вернуть позицию итератора после удаления
iterator erase(iterator it);//Удаляем символ, на который он указывает, и возвращаем позицию итератора после удаления
string &erase(int pos = 0, int n = npos);//удалить n символов, начиная с pos, и вернуть измененную строку
\
\
В-третьих, преобразование между C и C++
\
1. Ключ:
const char *data()const;//Возвращает ненулевой массив из c символов в конце
const char *c_str()const;//Возвращает строку c, заканчивающуюся нулем\
int copy(char *s, int n, int pos = 0) const;//Скопировать n символов, начинающихся с pos в текущей строке, в массив символов, начинающийся с s, и вернуть фактическое количество копий\
\
2.string-> const char *
Два метода:
string s1="kobebryant";
const char *a=s1.c_str();
const char *b=s1.c_str();
cout<<a<<endl;
cout<<b<<endl;
3. string-> char *
#include<iostream>
#include<malloc.h>
#include<string>
using namespace std;
int main(){
string s1="kobebryant 123";
char *c;
int len=s1.length();
c=(char*)malloc((len)*sizeof(char));
s1.copy(c,len,0);
cout<<c<<endl;
}
\
4. char *->string
string s;
char *p="kobe mvp!";
s=p;
cout<<s<<endl;
\
5. char[ ]->string
string s;
char p[10]="kobe mvp!";
s=p;
cout<<s<<endl;
6. string->char[ ]
string s = "kobe bryant";
char a[12];
for( int i=0;i<s.length();i++)
a[i] = s[i];
a[i] = '\0';
printf("%s\n",a);
\
\
\
\
\
\
\
\