ХОНХ

Энэ мэдээг чамаас өмнө уншсан хүмүүс бий.
Шинэ нийтлэлүүдийг хүлээн авахын тулд бүртгүүлээрэй.
Имэйл
Нэр
Овог
Та Хонхыг хэрхэн уншихыг хүсч байна вэ?
Спам байхгүй

Би "Масив" хэсэгт стрингуудын тухай сэдвийг тавьсан нь санамсаргүй хэрэг биш юм. Учир нь мөр нь үндсэндээ тэмдэгтүүдийн массив юм. Энд нэг жишээ байна:

char str = "Энэ бол зүгээр л мөр";

Илүү сайн ойлгохын тулд ижил мөрийг дараах байдлаар бичиж болно.

char str = ("E","t","o"," "","p","r","o","s","t","o","","s", "t", "r", "o", "k", "a");

Тэдгээр. Зөвхөн тэмдэгтүүдээс бүрдэх ижил массив хэвээр байна. Тиймээс та бүхэл тооны массивтай адил үүнтэй ажиллах боломжтой.

Одоо оролдоод үзье c-д мөртэй ажиллах. Танилцуулгын хичээлүүдээс бид тэмдэгтүүд нь бүхэл тоон төрөлд хамаардаг болохыг олж мэдсэн, өөрөөр хэлбэл. тэмдэгт бүр өөрийн гэсэн тоон утгатай байдаг. Энд жишээ ба түүний шийдэл байна:

  1. Та оруулсан үгийг том үсгээр хөрвүүлэх хэрэгтэй:
  2. #оруулна
    #оруулна

    Int main()
    {
    char str = "sergey";

    str[i] -= 32;
    }
    for (int i=0; str[i] != "\0";i++)(
    printf("%c", str[i]);
    }
    getch();

    Буцах 0;
    }

    Тооны кодыг авахын тулд printf функцийн %d тодорхойлогчийг ашиглахад л хангалттай. Тийм ээ, бас нэг чухал зүйл бол аливаа зүйлийн төгсгөл юм шугамууд"\0" гэсэн тусгай тэмдэгтээр тэмдэглэгдсэн тэг төгсгөлөгч юм.

Мөрийг тодорхойлох өөр нэг арга бол түүнийг char* ашиглан зарлах явдал юм. Энд нэг жишээ байна:

char *str = "утас";

Тэдгээр. мөрийн заагчийг үүсгэн санах ойн хаа нэгтээ байрлуулна.

Та бидэнд аль хэдийн танил болсон scanf оператороор хэрхэн мөр оруулах боломжтой вэ:

char str; scanf("%s", str);

Энд хоёр нарийн зүйл бий:

  1. Энд хаяг авах тэмдэг хэрэггүй, учир нь бидний мэдэж байгаагаар массивын нэр нь хаяг юм
  2. Оролтын мөрийн урт нь 15 тэмдэгтээс хэтрэхгүй байх ёстой, учир нь сүүлчийнх нь тэг төгсгөлөг байх ёстой. Түүнчлэн, хөрвүүлэгч өөрөө энэ тэмдгийг таны хамгийн сүүлд оруулсан тэмдгийн дараа бөглөнө.

Си хэл нь бүтцийн хэл учраас аль хэдийн суулгасан функцүүд байдаг утастай ажиллахмөн тэмдэгтүүдтэй. Мөрүүдийг боловсруулахын тулд ctype.h файлыг оруулах шаардлагатай. Файл нь үсэг, тэмдэгтийн форматыг тодорхойлох функцуудыг агуулдаг. Үндсэндээ, тэмдэгтийн талаар мэдэх шаардлагатай бүх зүйлийг ctype.h файлын функцуудыг ашиглан хийж болно

Заримдаа та мөрийг өөр өгөгдлийн төрөл болгон хөрвүүлэх шаардлагатай болдог. Мөрүүдийг өөр төрөл рүү хөрвүүлэхийн тулд stdlib номын сан байдаг. Энд түүний функцууд байна:

  1. int atoi (char *str)
  2. урт атол (char *str)
  3. давхар атоф (char *str)

Заримдаа эдгээр функцууд нь жишээлбэл, мөрөөс жил эсвэл тоон утгыг задлах шаардлагатай үед маш их тустай байдаг. c (si) дээр мөртэй ажиллахЭнэ бол маш чухал сэдэв тул энэ хичээлийг ойлгохыг хичээ.

C++ хэл дээрх мөрүүд

Мөр нь тэмдэгтүүдийн дараалал (массив) юм. Хэрэв илэрхийлэлд нэг тэмдэгт орсон бол түүнийг дотор нь оруулах ёстой ганц ишлэл. Илэрхийлэлд хэрэглэх үед мөрийг дотор нь хавсаргана давхар хашилт.Шугамын төгсгөлийн тэмдэг нь хоосон тэмдэгт юм \0 . C++ хэл дээр тэмдэгт мөрүүдийг (массив гэх мэт элементүүд) ашиглан дүрсэлж болно тэмдэгт), шугамын төгсгөлийг хадгалах газар байх ёстой.

Жишээлбэл, 25 тэмдэгттэй мөрийн тайлбар дараах байдалтай байна.

Та мөн цувааны массивыг тодорхойлж болно:

Тус бүр нь 25 байт 3 мөр бүхий массивыг тодорхойлсон.

Заагчтай ажиллахын тулд та ашиглаж болно ( тэмдэгт *). Эхний тэмдэгтийн хаяг нь заагчийн эхлэлийн утга байх болно.

Мөрүүдийг зарлах, гаргах жишээг харцгаая.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

#"stdafx.h" оруулах
#оруулна
namespace std ашиглах;
int main()
{
setlocale(LC_ALL,"Rus" );
//3 мөрийг дүрслэх, s3 нь заагч юм
char s2[ 20 ], * s3, s4[ 30 ] ;
cout<< «s2=» ; cin >> s2; // s2 оролтын мөр
cout<< «s2=» << s2<< endl;
//s3-д s4 хадгалагдаж байгаа мөрийн хаягийг бичнэ. Одоо хувьсагчдад
//(заагч) s3 ба s4 нь ижил хаягийн утгыг хадгалдаг
s3= s4;
cout<< «s3=» ; cin >> s3; //оролтын мөр s3
// s3 ба s4 мөрүүдийг дэлгэц рүү гаргана, гэхдээ s3=s4 даалгаврын үр дүнд;
//одоо s3 болон s4 нь ижил зүйл юм
cout<< «s3=» << s3<< endl;
cout<< «s4=» << s4<< endl;
систем("түр зогсоох");
буцаах 0 ;
}

Хөтөлбөрийн үр дүн:

Гэхдээ хэрэв хэрэглэгч хоосон зайгаар тусгаарлагдсан үгсийг нэг хувьсагч руу оруулбал програм өөрөөр ажиллах болно гэдгийг тэмдэглэх нь зүйтэй.

Бүх зүйл бол функц юм cinтулгарсан зай хүртэлх мөрүүдийг оруулна. Илүү уян хатан функц юм getline.

cin.getline(char *s, int n);

Гараас мөр оруулах зориулалттай схоосон зайтай бол мөрөнд -ээс ихгүй байх ёстой nтэмдэгтүүд. Тиймээс хоосон зай агуулсан мөрүүдийг зөв оруулахын тулд программдаа солих шаардлагатай cin>>sдээр cin.getline(s, 80).

Мөрний үйлдлүүд

Мөрийг массив боловсруулах алгоритмууд эсвэл тусгай мөр боловсруулах функцуудыг ашиглан тэмдэгтүүдийн массив хэлбэрээр боловсруулж болох бөгөөд тэдгээрийн заримыг доор өгөв. Эдгээр мөрүүдтэй ажиллахын тулд та номын санг оруулах хэрэгтэй cstring.

Тоог мөр болгон хөрвүүлэхийн тулд та функцийг ашиглаж болно sprintfномын сангаас stdio.h.

Мөртэй ажиллах зарим функцууд:

Функцийн прототип Функцийн тодорхойлолт
size_t strlen(const char *s) s мөрийн уртыг байтаар тооцдог.
char *strcat(char *dest, const char *scr) src мөрийг dest мөрийн төгсгөлд хавсаргахад үүссэн мөрийг үр дүнд нь буцаана.
char *strcpy(char *dest, const char *scr) scr мөрийг dest-ээр заасан санах ойн байршил руу хуулна
char strncat(char *dest, const char *dest, size_t maxlen) src мөрийн maxlen тэмдэгтүүдийг мөрийн төгсгөлд хавсаргана
char *strncpy(char *dest, const char *scr, size_t maxlen) src мөрийн maxlen тэмдэгтүүдийг dest-ээр заасан санах ойн байршил руу хуулна
int ctrcmp(const char *s1, const char *s2) том ба жижиг үсгийн ялгааг харгалзан хоёр мөрийг үг зүйн дарааллаар харьцуулж, мөр таарвал функц 0, s1 нь s2-ийн өмнө цагаан толгойн үсгийн дарааллаар байвал - 1, бусад тохиолдолд 1-ийг буцаана.
int strncmp(const char *s1, const char *s2, size_t maxlen) Хоёр мөрийн maxlen тэмдэгтийг үг зүйн дарааллаар харьцуулж, мөр таарвал функц 0, s1-ийг s2-ийн өмнө цагаан толгойн дарааллаар байрлуулсан бол - 1, эсрэгээр 1-ийг буцаана.
давхар атоф(const char *s) мөрийг бодит тоо болгон хувиргадаг; хэрэв хөрвүүлэлт амжилтгүй болбол 0 тоог буцаана
урт атол(const char *s) мөрийг урт бүхэл тоо болгон хувиргах ба хөрвүүлэлт амжилтгүй болвол 0-г буцаана
char *strchr(const char *s, int c); тэмдэгтийн эхний тохиолдол руу заагчийг буцаана взаасан шугам руу с. Хэрэв тэмдэг бол волдсонгүй, NULL-г буцаана
char *strupr(char *s) s-ээр заасан тэмдэгтүүдийг том үсэг болгон хувиргаж, дараа нь буцаана

мөр өгөгдлийн төрөл

Тэмдэгтүүдийн массив болгон мөрүүдтэй ажиллахаас гадна C++ хэлэнд тусгай өгөгдлийн төрөл байдаг мөр. Энэ төрлийн хувьсагчийг оруулахын тулд та ашиглаж болно cin, эсвэл тусгай функц getline.

getline(cin, s);

Энд с- оролтын төрлийн хувьсагчийн нэр мөр.

Энэ төрлийн хувьсагчийг тодорхойлохдоо тэр хувьсагчид шууд утгыг оноож болно.

string var(s);

Энд var- хувьсагчийн нэр, с- мөрийн тогтмол. Энэ мэдэгдлийн үр дүнд хувьсагч үүсдэг varтөрөл мөр, ба тэмдэгт мөрийн тогтмолын утгыг түүнд бичнэ с. Жишээлбэл,

string v("Сайн уу");

Мөр үүсгэсэн v, үүнд утгыг бичнэ Сайн уу.

хандах i-ршугамын элемент стөрөл мөрстандарт аргаар явуулсан s[i]. гэх мэт мөрүүдээс дээш мөрДараахь үйлдлүүдийг тодорхойлсон.

  • даалгавар, жишээ нь s1=s2;
  • тэмдэгт мөрүүдийг нэгтгэх (s1+=s2 эсвэл s1=s1+s2) - s1 мөрөнд s2 мөрийг нэмж, үр дүн нь s1 мөрөнд хадгалагдана, мөрүүдийг нэгтгэх жишээ:
  • Үг зүйн дараалалд тулгуурласан мөрийн харьцуулалт: s1=s2, s1!=s2, s1 s2, s1<=s2, s1>=s2 - үр дүн нь логик утга байх болно;

гэх мэт мөрүүдийг боловсруулах үед мөрДараах функцуудыг ашиглаж болно.

  • s.substr(поз, урт)- мөрөөс дэд мөрийг буцаана с, тооноос эхлэн байрлалурт урттэмдэгтүүд;
  • s.empty()- хэрэв мөр нь үнэнийг буцаана схоосон, худал - өөрөөр;
  • s.insert(pos, s1)- мөр оруулдаг s1эгнээнд орох с, байрлалаас эхлэн байрлал;
  • s.remove(поз, урт)- мөрөөс устгана сдэд мөр уртурт байрлалтэмдэгтүүд;
  • s.find(s1, pos)- мөрийн эхний тохиолдлын тоог буцаана s1эгнээнд орох с, хайлт нь тооноос эхэлдэг байрлал, параметр байрлалбайхгүй байж болно, энэ тохиолдолд хайлт нь мөрийн эхнээс эхэлдэг;
  • s.first(s1, pos)- тэмдэгт мөрийн эхний тохиолдлын тоог буцаана s1эгнээнд орох с, хайлт нь тооноос эхэлдэг байрлал, байхгүй байж магадгүй.

Мөрний орос хэл

Орос үсгийг гаргахдаа консол дээр "зүүн" тэмдэгтүүд гарч ирдгийг та аль хэдийн анзаарсан гэж бодож байна. Энэ үл ойлголцлоос зайлсхийхийн тулд та гуравдагч этгээдийн функцийг ашиглах хэрэгтэй CharToOemA. Номын санг холбож байна windows.h, энэ нь бидний функцийг өөр кодчилол руу хөрвүүлэхэд шаардлагатай. Мөн бидэнд нэмэлт тэмдэгтийн массив хэрэгтэй. Програмын эх код нь дараах байдлаар харагдах болно.

1
2
3
4
5
6
7
8
9
10
11
12
13
14

#"stdafx.h" оруулах
#оруулна
#оруулна
namespace std ашиглах;
int main()
( setlocale(LC_ALL, "Орос" );
char s[ 255 ] = ( "Би өөрчлөгдөх хэрэгтэй"} ;
char * pre= new char [255];
CharToOemA(s, pre); // хувиргах
cout<< s;
урьдчилан устгах;
систем("түр зогсоох>> хүчингүй");
буцаах 0 ;
}

Саяхан тайлбарласан арга нь нэлээд тохиромжгүй юм. Гэхдээ "Оросын" асуудлыг шийдэх илүү хялбар арга бий. Таны харж байгаагаар уг программ нь setlocale() функцийг ашигладаг бөгөөд үүний оронд үндсэн функцэд дараах бүтцийг оруулах нь илүү тохиромжтой.

Энэ сайт дээрх AdBlock-ийг түр зогсооно уу.

Тэгэхээр Си хэл дээрх мөрүүд. Бусад олон програмчлалын хэл дээр байдаг шиг тэдгээрт зориулсан тусдаа өгөгдлийн төрөл байдаггүй. Си хэлэнд мөр нь тэмдэгтүүдийн массив юм. Мөрийн төгсгөлийг тэмдэглэхийн тулд "\0" тэмдэгтийг ашигладаг бөгөөд энэ талаар бид энэ хичээлийн сүүлчийн хэсэгт хэлэлцсэн. Энэ нь дэлгэцэн дээр ямар ч байдлаар харагдахгүй тул та үүнийг харах боломжгүй болно.

Мөр үүсгэх ба эхлүүлэх

Мөр нь тэмдэгтүүдийн массив тул мөрийг зарлах, эхлүүлэх нь нэг хэмжээст массивтай ижил төстэй үйлдлүүдтэй төстэй юм.

Дараах код нь мөрүүдийг эхлүүлэх янз бүрийн аргуудыг харуулж байна.

Жагсаалт 1.

Чар гудамж; char str1 = ("Y","o","n","g","C","o","d","e","r","\0"); char str2 = "Сайн уу!"; char str3 = "Сайн уу!";

Зураг.1 Мөрүүдийг зарлах, эхлүүлэх

Эхний мөрөнд бид ердөө арван тэмдэгтийн массивыг зарлана. Энэ нь үнэндээ утас ч биш, учир нь ... Үүнд \0 хоосон тэмдэгт байхгүй, одоогоор энэ нь зөвхөн тэмдэгтүүдийн багц юм.

Хоёр дахь мөр. Шууд эхлүүлэх хамгийн энгийн арга. Бид тэмдэг бүрийг тусад нь зарладаг. Энд гол зүйл бол null тэмдэгт нэмэхээ мартаж болохгүй \0 .

Гурав дахь мөр нь хоёр дахь мөртэй төстэй. Зурган дээр анхаарлаа хандуулаарай. Учир нь Баруун талын мөрөнд массив дахь элементүүдээс цөөн тэмдэгт байгаа бөгөөд үлдсэн элементүүд нь \0 -ээр дүүргэгдэх болно.

Дөрөв дэх мөр. Таны харж байгаагаар энд тодорхой хэмжээ байхгүй байна. Програм нь үүнийг автоматаар тооцоолж, шаардлагатай урттай тэмдэгтүүдийн массив үүсгэх болно. Энэ тохиолдолд тэг тэмдэгт \0 хамгийн сүүлд оруулна.

Мөрийг хэрхэн гаргах вэ

Дээрх кодыг дэлгэцэн дээр үүсгэсэн мөрүүдийг харуулах бүрэн хэмжээний програм болгон өргөжүүлье.

Жагсаалт 2.

#оруулна int main(void) ( char str; char str1 = ("Y","o","n","g","C","o","d","e","r"," \0"); char str2 = "Сайн уу!"; char str3 = "Сайн уу!"; for(int i = 0; i< 10; i = i + 1) printf("%c\t",str[i]); printf("\n"); puts(str1); printf("%s\n",str2); puts(str3); return 0; }


Зураг.2 Дэлгэц дээр мөрийг харуулах янз бүрийн арга

Таны харж байгаагаар дэлгэц дээр мөрийг харуулах хэд хэдэн үндсэн арга байдаг.

  • %s тодорхойлогчтой printf функцийг ашиглана уу
  • puts функцийг ашиглана уу
  • fputs функцийг ашиглан гаралтын стандарт урсгалыг хоёр дахь параметр болгон stdout гэж зааж өгнө.

Цорын ганц ялгаа нь puts болон fputs функцууд юм. puts функц нь гаралтыг дараагийн мөрөнд оруулдаг бол fputs функц тийм биш гэдгийг анхаарна уу.

Таны харж байгаагаар дүгнэлт нь маш энгийн.

Мөр оруулах

Мөрний оролт нь гаралтаас арай илүү төвөгтэй байдаг. Хамгийн энгийн арга бол дараахь зүйл байх болно.

Жагсаалт 3.

#оруулна int main(void) (char str; gets(str); puts(str); буцаах 0; )

Gets функц нь програмыг түр зогсоож, гарнаас оруулсан тэмдэгтүүдийн мөрийг уншиж, тэмдэгтийн массив дотор байрлуулж, нэрийг нь функцэд параметр болгон дамжуулдаг.
gets функц нь enter товчлуурт харгалзах тэмдэгтээр гарч, мөрөнд тэг тэмдэгтээр бичигдэнэ.
Аюул байгааг анзаарсан уу? Хэрэв үгүй ​​​​бол хөрвүүлэгч танд энэ талаар анхааруулах болно. Асуудал нь хэрэглэгч enter дарахад л gets функц гарна. Энэ нь бидний хувьд 20-оос дээш тэмдэгт оруулсан тохиолдолд массиваас давж гарах боломжтой гэсэн үг юм.
Дашрамд хэлэхэд, буфер халих алдаа нь өмнө нь хамгийн нийтлэг эмзэг байдлын төрөл гэж тооцогддог. Тэд одоо ч байсаар байгаа ч программуудыг хакердахдаа ашиглах нь илүү хэцүү болсон.

Тэгэхээр бидэнд юу байгаа вэ? Бидэнд даалгавар байна: хязгаарлагдмал хэмжээтэй массив руу мөр бичих. Өөрөөр хэлбэл, бид хэрэглэгчийн оруулсан тэмдэгтүүдийн тоог ямар нэгэн байдлаар хянах ёстой. Энд fgets функц бидэнд туслах болно:

Жагсаалт 4.

#оруулна int main(void) ( char str; fgets(str, 10, stdin); puts(str); буцаах 0; )

fgets функц нь гурван аргументыг оролт болгон авдаг: мөрийг бичих хувьсагч, бичих мөрийн хэмжээ, мөрөнд бичих өгөгдлийг авах урсгалын нэр, энэ тохиолдолд stdin. 3-р хичээлээс та аль хэдийн мэдэж байгаачлан stdin нь ихэвчлэн гартай холбоотой стандарт оролтын урсгал юм. Өгөгдөл нь stdin урсгалаас ирсэн байх шаардлагагүй, ирээдүйд бид энэ функцийг файлаас өгөгдлийг уншихад ашиглах болно.

Хэрэв энэ программыг гүйцэтгэх явцад бид 10 тэмдэгтээс урт тэмдэгт оруулбал зөвхөн эхнээс нь 9 тэмдэгт, мөрийн тасалдал массив дээр бичигдсэн хэвээр байвал fgets тэмдэгт мөрийг шаардлагатай уртаар "тайрах" болно.

fgets функц нь 10 тэмдэгт уншдаггүй, харин 9 тэмдэгт уншдаг болохыг анхаарна уу! Бидний санаж байгаагаар мөрт сүүлийн тэмдэгт нь null тэмдэгтэд зориулагдсан байдаг.

Үүнийг шалгаж үзье. Сүүлчийн жагсаалтаас програмыг ажиллуулцгаая. Мөн 1234567890 гэсэн мөрийг оруулна уу. Дэлгэц дээр 123456789 гэсэн мөр гарч ирнэ.


Зураг 3 fgets функцийн жишээ

гэсэн асуулт гарч ирнэ. Арав дахь дүр нь хаашаа явсан бэ? Тэгээд би хариулах болно. Энэ нь алга болоогүй, оролтын урсгалд хэвээр байна. Дараах програмыг ажиллуул.

Жагсаалт 5.

#оруулна int main(void) ( char str; fgets(str, 10, stdin); puts(str); int h = 99; printf("do %d\n", h); scanf("%d",&h) ; printf("%d\n дараа", h); буцаана 0; )

Түүний ажлын үр дүн энд байна.


Зураг.4 Хоосон бус stdin буфер

Юу болсныг тайлбарлая. Бид fgets функцийг дуудсан. Тэр оролтын урсгалыг нээж, биднийг өгөгдөл оруулахыг хүлээв. Бид гараас 1234567890\n орууллаа (\n Enter товчийг дарж байна гэсэн үг). Энэ нь stdin оролтын урсгал руу очсон. fgets функц нь хүлээгдэж байгаачлан оролтын урсгалаас эхний 9 тэмдэгт 123456789-ийг авч, тэдгээрт null тэмдэгт \0 нэмээд str мөрөнд бичжээ. Оролтын урсгалд 0\n үлдсэн хэвээр байна.

Дараа нь бид h хувьсагчийг зарлана. Бид түүний утгыг дэлгэц дээр харуулдаг. Дараа нь бид scanf функцийг дууддаг. Энд бид ямар нэгэн зүйл оруулах боломжтой гэж найдаж байна, гэхдээ ... Оролтын урсгалд 0\n өлгөөтэй байвал scanf функц үүнийг бидний оролт гэж хүлээн авч h хувьсагч руу 0 бичнэ. Дараа нь бид үүнийг дэлгэц дээр харуулна.

Мэдээжийн хэрэг, энэ нь бидний хүлээж буй зан чанар биш юм. Энэ асуудлыг шийдэхийн тулд бид хэрэглэгчийн оруулсан мэдээллийг уншсаны дараа оролтын буферийг цэвэрлэх хэрэгтэй. Үүний тулд fflush тусгай функцийг ашигладаг. Энэ нь зөвхөн нэг параметртэй - цэвэрлэх шаардлагатай урсгал.

Сүүлчийн жишээг урьдчилан таамаглахын тулд засъя.

Жагсаалт 6.

#оруулна int main(void) ( char str; fgets(str, 10, stdin); fflush(stdin); // puts(str); int h = 99; printf("do %d\n", h ); scanf("%d",&h); printf("%d\n", h-ийн дараа); 0 буцаана; )

Одоо програм нь байх ёстой байдлаараа ажиллах болно.


Зураг.4 stdin буферийг fflush функцээр угаах

Дүгнэж хэлэхэд хоёр баримтыг дурдаж болно. Эхлээд. Одоогоор gets функцийг ашиглахад аюултай тул fgets функцийг хаа сайгүй ашиглахыг зөвлөж байна.

Хоёрдугаарт. Хэрэв та fgets функцийг ашигладаг бол оролтын буферийг арилгахаа бүү мартаарай.

Үүгээр утсыг оруулах тухай яриа өндөрлөж байна. Үргэлжлүүл.

Сүүлд шинэчлэгдсэн: 2015/10/31

Холболт

Мөрний холболт эсвэл нэгдлийг + оператор эсвэл Concat аргыг ашиглан хийж болно:

Мөр s1 = "сайн уу"; string s2 = "дэлхий"; string s3 = s1 + " " + s2; // үр дүн: string "hello world" string s4 = String.Concat(s3, "!!!"); // үр дүн: "Сайн уу ертөнц!!!" Console.WriteLine(s4);

Concat арга нь хоёр мөрийг параметр болгон авдаг String ангийн статик арга юм. Мөн өөр олон тооны параметрүүдийг авдаг аргын өөр хувилбарууд байдаг.

Join аргыг мөн мөрүүдийг холбоход ашиглаж болно:

Мөр s5 = "алим"; string s6 = "нэг өдөр"; string s7 = "хадгалах"; string s8 = "эмч"; string s9 = "хол"; мөрийн утгууд = шинэ мөр (s5, s6, s7, s8, s9); String s10 = String.Join(" ", утгууд); // үр дүн: "өдөрт алим эмчийг хол байлгадаг" мөр

Join арга нь мөн статик юм. Дээр ашигласан аргын хувилбар нь тусгаарлах тэмдэгт мөр (энэ тохиолдолд хоосон зай) болон тусгаарлагчаар хооронд нь холбож, тусгаарлах мөрүүдийн массив гэсэн хоёр параметрийг авна.

Мөрний харьцуулалт

Мөрүүдийг харьцуулахын тулд статик Compare аргыг ашиглана уу:

Мөр s1 = "сайн уу"; string s2 = "дэлхий"; int үр дүн = String.Compare(s1, s2); хэрэв (үр дүн<0) { Console.WriteLine("Строка s1 перед строкой s2"); } else if (result >0) ( Console.WriteLine("s1 мөр s2 мөрийн дараа ирдэг"); ) else ( Console.WriteLine("s1 ба s2 мөрүүд ижил байна"); ) // үр дүн нь "s2 мөрийн өмнө s1" байх болно.

Харьцуулах аргын энэ хувилбар нь хоёр мөр авч, тоо буцаана. Хэрэв эхний мөр нь цагаан толгойн дарааллаар хоёр дахь мөрөөс өндөр байвал тэгээс бага тоог буцаана. Үгүй бол тэгээс их тоог буцаана. Гурав дахь тохиолдол - хэрэв мөрүүд тэнцүү бол 0 тоог буцаана.

Энэ тохиолдолд h тэмдэгт нь цагаан толгойн үсгийн дарааллаар w тэмдэгтээс өндөр байх тул эхний мөр нь өндөр байх болно.

Мөр дотор хайх

IndexOf аргыг ашиглан бид мөрөнд нэг тэмдэгт эсвэл дэд мөрийн анхны тохиолдлын индексийг тодорхойлж болно.

Мөр s1 = "Сайн уу ертөнц"; char ch = "o"; int indexOfChar = s1.IndexOf(ch); // 4-тэй тэнцүү Console.WriteLine(indexOfChar); string subString = "wor"; int indexOfSubstring = s1.IndexOf(subString); // 6-тай тэнцүү Console.WriteLine(indexOfSubstring);

LastIndexOf арга нь мөр доторх тэмдэгт эсвэл дэд мөрийн сүүлийн тохиолдлын индексийг олохоос бусад тохиолдолд ижил төстэй байдлаар ажилладаг.

Өөр нэг бүлэг аргууд нь мөр нь тодорхой дэд тэмдэгтээр эхэлж эсвэл төгсдөг эсэхийг олж мэдэх боломжийг олгодог. StartsWith болон EndsWith аргууд нь үүнд зориулагдсан болно. Жишээлбэл, бидэнд .exe өргөтгөлтэй бүх файлыг хавтаснаас устгах даалгавар байна:

Мөрийн зам = @"C:\SomeDir"; мөр файлууд = Directory.GetFiles(зам); хувьд (int i = 0; i< files.Length; i++) { if(files[i].EndsWith(".exe")) File.Delete(files[i]); }

Мөр хуваах

Split функцийг ашигласнаар бид мөрийг дэд мөрүүдийн массив болгон хувааж болно. Split функц нь параметрийн хувьд тэмдэгтүүд эсвэл мөрүүдийн массивыг авдаг бөгөөд энэ нь хязгаарлагчийн үүрэг гүйцэтгэдэг. Жишээлбэл, нэр томьёоны үгийн тоог хоосон зайн тэмдэгтээр хувааж тоолъё:

String text = "Тэгээд энэ бүхэн ийм болсон"; мөр үгс = текст.Split(шинэ тэмдэг ( " " )); foreach (үгээр тэмдэгт мөр) ( Console.WriteLine(s); )

Энэ нь хоосон зайгаар хуваах хамгийн сайн арга биш, учир нь бид оролтын мөрөнд хэд хэдэн дараалсан зайтай байж болох ба үүссэн массив нь хоосон зайг агуулж болох тул аргын өөр хувилбарыг ашиглах нь дээр:

Мөр үгс = text.Split(шинэ тэмдэгт ( " " ), StringSplitOptions.RemoveEmptyEntries);

Хоёрдахь параметр StringSplitOptions.RemoveEmptyEntries нь бүх хоосон дэд мөрүүдийг устгах ёстой гэж хэлдэг.

Шугам тайрч байна

Эхлэх эсвэл арын тэмдэгтүүдийг тайрахын тулд Trim функцийг ашиглана уу:

Мөр текст = "Сайн уу ертөнц"; text = text.Trim(); // үр дүн "сайн уу ертөнц" текст = text.Trim(new char ( "d", "h" )); // үр дүн "ello world"

Trim функц нь параметргүй, эхний болон арын зайг багасгаж, таслагдсан мөрийг буцаана. Аль эх болон арын тэмдэгтүүдийг тайрах ёстойг тодорхой зааж өгөхийн тулд бид тэдгээр тэмдэгтүүдийн массивыг функц руу дамжуулж болно.

Энэ функц нь хэсэгчилсэн аналогуудтай: TrimStart функц нь эхлэл тэмдэгтүүдийг, TrimEnd функц нь төгсгөлийн тэмдэгтүүдийг тайрдаг.

Substring функц нь мөрийн тодорхой хэсгийг тайрах боломжийг танд олгоно.

Мөр текст = "Өдрийн мэнд"; // гурав дахь тэмдэгтээс эхлэн таслах текст = text.Substring(2); // үр дүн "сайн өдрийн мэнд" Console.WriteLine(текст); // эхний хоёр тэмдэгт хүртэл таслах text = text.Substring(0, text.Length - 2); // үр дүн "roshy de" Console.WriteLine(текст);

Substring функц нь мөн таслагдсан мөрийг буцаана. Ашигласан эхний хувилбар нь индексийг параметр болгон ашигладаг бөгөөд үүнээс эхлэн мөрийг тайрах шаардлагатай. Хоёрдахь хувилбарт хоёр параметрийг ашигладаг - шүргэх эхлэлийн индекс ба мөрний зүссэн хэсгийн урт.

Оруулах

Нэг мөрийг нөгөө мөрөнд оруулахын тулд Insert функцийг ашиглана уу:

Мөр текст = "Өдрийн мэнд"; string subString = "гайхалтай"; text = text.Insert(8, subString); Console.WriteLine(текст);

Insert функцийн эхний параметр нь дэд мөрийг оруулах индекс, хоёр дахь параметр нь дэд мөр өөрөө юм.

Мөрүүдийг устгаж байна

Устгах арга нь мөрийн хэсгийг устгахад тусалдаг:

Мөр текст = "Өдрийн мэнд"; // сүүлчийн тэмдэгтийн индекс int ind = text.Length - 1; // сүүлчийн тэмдэгтийг хайчлах текст = text.Remove(ind); Console.WriteLine(текст); // эхний хоёр тэмдэгтийг хайчилж ав text = text.Remove(0, 2);

Устгах аргын эхний хувилбар нь мөрөнд индексийг авдаг бөгөөд үүнээс эхлэн бүх тэмдэгтүүдийг устгах ёстой. Хоёрдахь хувилбар нь өөр нэг параметрийг авдаг - хэдэн тэмдэгтийг хасах ёстой.

Солих

Нэг тэмдэгт эсвэл дэд мөрийг нөгөө тэмдэгтээр солихын тулд Replace аргыг ашиглана уу:

Мөр текст = "Сайн өдөр"; text = text.Replace("сайн", "муу"); Console.WriteLine(текст); text = text.Replace("o", ""); Console.WriteLine(текст);

Replace функцийг ашиглах хоёр дахь тохиолдолд нэг "o" тэмдэгтийн мөрийг хоосон тэмдэгтээр сольж, өөрөөр хэлбэл текстээс хасдаг. Энэ арга нь тодорхой текстийг мөрөнд устгахад хялбар болгодог.

Кейс солих

Мөрийг том, жижиг үсгээр хөрвүүлэхийн тулд ToUpper() болон ToLower() функцуудыг тус тус ашиглана:

String hello = "Сайн уу ертөнц!"; Console.WriteLine(hello.ToLower()); // Сайн уу дэлхий! Console.WriteLine(hello.ToUpper()); // САЙН ДЭЛХИЙ!

Орчин үеийн C++ стандарт нь мөртэй ажиллах ажлыг зохион байгуулах функц, шинж чанар (хувьсагч) бүхий классыг тодорхойлдог (сонгодог Си хэлэнд ийм мөр байдаггүй, зөвхөн тэмдэгтийн массив байдаг):

#оруулна

#оруулна

#оруулна

Мөртэй ажиллахын тулд та стандарт нэрийн зайг холбох хэрэгтэй.

Namespace std ашиглах;

Үгүй бол та string-ийн оронд std::string ангийн тодорхойлогчийг зааж өгөх хэрэгтэй болно.

Мөртэй ажилладаг програмын жишээг доор харуулав (хуучин C-тэй нийцтэй хөрвүүлэгчид ажиллахгүй!):

#оруулна #оруулна #оруулна namespace std ашиглах; int main() ( string s = "Тест"; s.insert(1,"!"); cout<< s.c_str() << endl; string *s2 = new string("Hello"); s2->устгах(s2->төгсгөл()); cout<< s2->c_str(); cin.get(); буцаах 0; )

Стринг ангид байдаг гол шинж чанарууд:

  • тэмдэгтийн массив (суулгасан мөрийн төрөл) эсвэл string төрлийн өөр объект ашиглан эхлүүлэх. Баригдсан төрөл нь хоёрдахь чадваргүй;
  • нэг мөрийг нөгөө мөр рүү хуулах. Баригдсан төрлийн хувьд та strcpy() функцийг ашиглах ёстой;
  • Унших, бичихийн тулд мөрийн бие даасан тэмдэгтүүдэд хандах. Баригдсан массивын хувьд энэ нь индексийн үйлдэл эсвэл заагч ашиглан шууд бус хаяглалт ашиглан хийгддэг;
  • тэгш байдлын хоёр мөрийг харьцуулах. Баригдсан төрлийн хувьд strcmp() гэр бүлийн функцуудыг ашигладаг;
  • хоёр мөрийг нэгтгэх (холбох), үр дүнг гурав дахь мөр болгон эсвэл эхийн аль нэгнийх нь оронд гаргах. Баригдсан төрлийн хувьд strcat() функцийг ашигладаг боловч үр дүнг шинэ мөрөнд авахын тулд та strcpy() болон strcat() функцуудыг дараалан ашиглахаас гадна санах ойн хуваарилалтыг анхаарч үзэх хэрэгтэй;
  • Мөрний уртыг тодорхойлох хэрэгсэл (ангиллын гишүүн функцууд size() болон l ength()). Баригдсан төрлийн мөрийн уртыг олох цорын ганц арга бол strlen() функцийг ашиглан тооцоолох явдал юм;
  • тэмдэгт мөр хоосон эсэхийг мэдэх чадвар.

Эдгээр үндсэн шинж чанаруудыг илүү нарийвчлан авч үзье.

Мөрүүдийг эхлүүлж байнатайлбарлахдаа ба мөрний урт(төгсгөгч тэг терминаторыг оруулаагүй):

String st("Миний мөр\n"); cout<< "Длина " << st << ": " << st.size() << " символов, включая символ новой строки\n";

Мөр нь мөн хоосон байж болно:

st2 мөр;

Үүнийг шалгахын тулд мөр хоосон байна, та түүний уртыг 0-тэй харьцуулж болно:

Хэрэв (! st.size()) // хоосон

эсвэл хоосон мөрт үнэн, хоосон биш бол худал буцаадаг empty() аргыг ашиглана:

Хэрэв (st.empty()) // хоосон

Мөр үүсгэх гурав дахь хэлбэр нь string төрлийн объектыг ижил төрлийн өөр объекттой эхлүүлдэг:

String st3(st);

st3 мөрийг st тэмдэгт мөрөөр эхлүүлнэ. Бид эдгээрийг хэрхэн баталгаажуулах вэ шугамууд таарч байна? Харьцуулах операторыг (==) ашиглацгаая:

Хэрэв (st == st3) // эхлүүлсэн бол

Хэрхэн нэг мөрийг нөгөө мөр рүү хуулах? Энгийн томилгооны операторыг ашиглан:

St2 = st3; // st3-ыг st2 руу хуулна

Учир нь мөр холбохнэмэх оператор (+) эсвэл нэмэх нэмэх үүрэг гүйцэтгэгч (+=) ашигладаг. Хоёр мөр өгье:

Мөр s1("сайн уу,"); string s2("дэлхий\n");

Бид эхний хоёрын холболтоос бүрдэх гурав дахь мөрийг дараах байдлаар авч болно.

Мөр s3 = s1 + s2;

Хэрэв бид s1-ийн төгсгөлд s2 нэмэхийг хүсвэл дараахь зүйлийг бичих хэрэгтэй.

S1 += s2;

Нэмэх үйлдэл нь ангийн объектуудыг нэгтгэж болно мөрзөвхөн өөр хоорондоо төдийгүй, мөн суурилагдсан төрлийн мөрүүдтэй. Та дээрх жишээг дахин бичиж болно, ингэснээр тусгай тэмдэгтүүд болон цэг таслалуудыг суулгасан char * төрлөөр, чухал үгсийг ангийн мөрийн объектуудаар төлөөлүүлнэ.

Const char *pc = ","; string s1("сайн уу"); string s2("дэлхий"); string s3 = s1 + pc + s2 + "\n"; cout<< endl << s3;

Хөрвүүлэгч нь суулгасан төрлийн объектуудыг string ангиллын объект руу хэрхэн автоматаар хөрвүүлэхийг "мэддэг" учраас ийм илэрхийллүүд ажилладаг. Мөн стринг объектод суурилагдсан мөрийг зүгээр л оноож болно:

s1 мөр; const char *pc = "тэмдэгтийн массив"; s1 = pc; // Зөв

Энэ тохиолдолд урвуу хувирал Ажиллахгүй байна. Дараах суулгасан төрлийн стринг эхлүүлэхийг оролдох нь эмхэтгэлд алдаа гаргах болно.

Char *str = s1; // эмхэтгэлийн алдаа

Энэ хөрвүүлэлтийг хийхийн тулд та c_str() ("C string") нэртэй гишүүн функцийг шууд дуудах ёстой:

Const char *str = s1.c_str();

c_str() функц нь мөрийн объектын мөрийг агуулсан тэмдэгтийн массив руу заагчийг суулгасан мөрийн төрөлд харагдах байдлаар буцаана. Энд байгаа const түлхүүр үг нь орчин үеийн харааны орчинд объектын агуулгыг заагчаар шууд өөрчлөх "аюултай" боломжоос сэргийлдэг.

TO бие даасан дүрүүдБаригдсан төрөл шиг string төрлийн объектод индексийн үйлдлийг ашиглан хандаж болно. Жишээлбэл, бүх цэгийг доогуур зураасаар сольсон кодын хэсэг энд байна:

String str("www.disney.com"); int хэмжээ = str.size(); хувьд (int i = 0; i< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;

Replace(str.begin(), str.end(), ".", "_");

Үнэн, энд мөрийн ангийн солих аргыг биш, харин ижил нэртэй алгоритмыг ашигладаг:

#оруулна

Мөрийн объект нь контейнер шиг ажилладаг тул түүнд өөр алгоритмуудыг хэрэглэж болно. Энэ нь string ангийн функцээр шууд шийдэгдээгүй асуудлыг шийдэх боломжийг танд олгоно.

Доорх нь мөрийн ангиллын үндсэн операторууд болон функцуудын товч тайлбарыг өгсөн болно; Хүснэгт дэх холбоосууд нь интернет дэх орос хэл дээрх тайлбарыг хүргэж байна. Мөрний ангийн боломжуудын илүү бүрэн жагсаалтыг, жишээлбэл, Википедиа эсвэл cplusplus.com вэбсайтаас олж болно.

Мөр дэх тэмдэгтүүдийг зааж өгч байна

оператор =

мөрөнд утгыг оноодог

томилох

тэмдэгт мөрт онооно

Хувь хүний ​​дүрд нэвтрэх

цагт

заасан тэмдэгтийг авч, индекс хязгаараас гарсан эсэхийг шалгана

оператор

заасан тэмдэгтийг авах

урд

эхний дүрийг авах

буцаж

сүүлчийн дүрийг авах

өгөгдөл

мөрийн эхний тэмдэгт рүү заагч буцаана

c_str

буцаж ирдэг өөрчлөх боломжгүймөрийн тэмдэгтүүдийг агуулсан С тэмдэгтийн массив

Шугамын багтаамжийг шалгах

хоосон

тэмдэгт мөр хоосон эсэхийг шалгана

хэмжээ
урт

мөр дэх тэмдэгтүүдийн тоог буцаана

дээд_хэмжээ

тэмдэгтүүдийн хамгийн их тоог буцаана

нөөц

хадгалах зайг нөөцөлж байна

Мөрийн үйлдлүүд

тодорхой

мөрийн агуулгыг арилгана

оруулах

тэмдэгт оруулах

арилгах

тэмдэгтүүдийг устгах

буцаах

мөрийн төгсгөлд тэмдэгт нэмэх

pop_back

сүүлчийн тэмдэгтийг устгана

хавсаргана

оператор+=

тэмдэгт мөрийн төгсгөлд хавсаргана

харьцуулах

хоёр мөрийг харьцуулдаг

солих

заасан тэмдэгтийн тохиолдол бүрийг орлоно

дэд стр

дэд мөрийг буцаана

хуулбарлах

дүрүүдийг хуулбарладаг

хэмжээг өөрчлөх

хадгалагдсан тэмдэгтүүдийн тоог өөрчилнө



ХОНХ

Энэ мэдээг чамаас өмнө уншсан хүмүүс бий.
Шинэ нийтлэлүүдийг хүлээн авахын тулд бүртгүүлээрэй.
Имэйл
Нэр
Овог
Та Хонхыг хэрхэн уншихыг хүсч байна вэ?
Спам байхгүй