Глава 3
Вверх
inline std::string trim(const std::string& s) {
Первый тест выясняет, не является ли строка пустой; в этом случае проверка не выполняется, и функция возвращает копию строки. Обратите внимание, после нахождения конечных точек конструктор string строит новую строку на основе старой по заданной начальной позиции и длине.
Такие общецелевые утилиты нуждаются в тщательном тестировании:
Вверх
class TrimTest : public TestSuite::Test {
Вверх
// Инициализация статических данных
Вверх
int main() {
Анализ:
На примере массива string видно, как символьные массивы автоматически преобразовываются в объекты string. В массив включены примеры для проверки факта удаления пробелов и символов табуляции с обоих концов строки, а так же примеры, показывающий, что пробелы и табуляции в середине строки остаются на своих местах.
Назад |
Начало урока |
Вверх |
Вперед
//: C03:Trim.h
// Утилита для удаления пропусков с концов строки.
#ifndef TRIM_H
#define TRIM_H
#include <string>
#include <cstddef>
int end = s.find_last_not_of(" \a\b\f\n\r\t\v");
if(beg == std::string::npos) // Строка содержит только пропуски
#endif // TRIM_H ///:~
Анализ:
//: C03:TrimTest.h
#ifndef TRIMTEST_H
#define TRIMTEST_H
#include "Trim.h"
#include "../TestSuite/Test.h"
static std::string s[NTESTS];
test_(trim(s[1]) == "abcdefghijklmnop");
test_(trim(s[2]) == "abcdefghijklmnop");
test_(trim(s[3]) == "a");
test_(trim(s[4]) == "ab");
test_(trim(s[5]) == "abc");
test_(trim(s[6]) == "a b c");
test_(trim(s[7]) == "a b c");
test_(trim(s[8]) == "a \t b \t c");
test_(trim(s[9]) == "");
test_(trim(s[10]) == "");
#endif // TRIMTEST_H ///:~
Анализ:
//: C03:TrimTest.cpp {0}
#include "TrimTest.h"
std::string TrimTest::s[TrimTest::NTESTS] = {
"abcdefghijklmnop \t ",
" \t abcdefghijklmnop",
"a", "ab", "abc", "a b c",
" \t a b c \t ", " \t a \t b \t c \t ",
"\t \n \r \v \f",
"" // Также необходимо провести проверку пустой строки
Анализ:
//: C03:TrimTestMain.cpp
//{L} ../TestSuite/Test TrimTest
#include "TrimTest.h"
t.run();
return t.report();
Результат:
Содержание