works:programmer:cpp:strings
C / C++ Strings
Как-бы на Stackoverflow на русском, очень часто люди спрашивали как писать правильно wchar_t да так что-бы комп нормально понимал. Все обычные строковые функции хранятся в string.h, для работы с wide char хранятся в wchar.h хочу заметить что wchar.h должен подключаться САМЫМ ПЕРВЫМ include'ом! Это важно. Так-же для могут понадобиться stdio.h и stdlib.h - в них есть куча полезных вещей, например printf в stdio или memset в stdlib очень упростят работу с любым Ptr (void*). И разница в в malloc и calloc в том, что calloc (character allocation) занимает в памяти место и тут-же зануляет буфер «\0\0\0\0\0», а malloc (memory allocation) просто занимает в памяти место и У пойми какая там ересь может быть.
Основы
char* | wchar_t* | std::string | Описание |
---|---|---|---|
«str», str[], str[n] | L«str», … | «str» | Создать строку статический |
malloc, calloc | new std::string(n) | Создать строку динамический (не забываем про free(chrptr*)) | |
strlen | wcslen | str.length() | Посчитать количество символов до первого '\0' |
strcpy | wcscpy | std::string str = «abc» | Копирует текст с начала строки, и завершает её '\0' |
strcat | wcscat | str += «abc» | Добавляет к строке строку, и завершает её через '\0' |
strcmp | wcscmp | str1.compare(str2) | Сравнить 2 строки, если равны то результат == 0 |
strstr | wcsstr | str.find | Найти строку в строке, в Си результат будет ptr* на символ или NULL при ошибке |
strrchr | wcsrchr | Найти совпадение с конца строки, работает так-же как strstr | |
fgets | fgetws | std::cin » str | Прочитать строку из буфера stdin, в Си при провале вернёт NULL, при перегрузке длинны буфера например 1024б вернёт 1023 байта + '\0' |
fputs | fputws | std::cout « str « endl | Выводит текст на экран без форматирования в качестве файла используем stdout |
printf | wprintf(L«Привет %ld!\n», L«мир») | Выводит форматированную строку, аналога в С++ нету, но можно форматировать через чередование cout. cout << "Строка" << 5 << endl; |
Конвертируем String в WideString
#include <string> #include <algorithm> // Prototype for conversion functions std::wstring StringToWString(const std::string& s); std::string WStringToString(const std::wstring& s); //--- std::wstring StringToWString(const std::string& s) { std::wstring temp(s.length(),L' '); std::copy(s.begin(), s.end(), temp.begin()); return temp; } std::string WStringToString(const std::wstring& s) { std::string temp(s.length(), ' '); std::copy(s.begin(), s.end(), temp.begin()); return temp; }
Хороший пример по StrStr
#include <stdio.h> #include <string.h> int main() { char str1[11] = "0123456789"; // не забываем про 10+'\0' char str2[10] = "345"; char* istr; istr = strstr(str1, str2); if (istr == NULL) { printf("Substring not found!\n"); } else { printf("Substing starts from simbol %ld\n", istr-(str1)+1); // Out -> Substing starts from simbol 4 } return 0; }
works/programmer/cpp/strings.txt · Последнее изменение: 2022/05/06 15:52 — 127.0.0.1