2016-06-09 8 views
0

Мне нужна помощь с таблицами таблиц C++ <string.h> .... Как вырезать слово из предложения, используя оператор «*», без strstr? Например: «StackOverFlow - это онлайн-сайт». Я должен отключить «StackOverFlow» и оставить в таблице «онлайн-сайт», используя оператора, без strstr. Я не мог найти его нигде.C++ String.h Таблицы с таблицами обрезания без strstr

В основном, как:

char t[] 

int main 
{ 
    strcpy(t,"Stackoverflow is online website"); 

    ??? 
    (Setting first char to NULL, then strcat/strcpy rest of sentence into table) 

} 

К сожалению для английских проблем/Bad наименования ... Я начинаю учить C++

+0

ли я понимаю, что вы в порядке? Вам нужно отрезать часть c-строки и сохранить ее в той же переменной? Есть ли какая-либо причина против strstr в этом случае? Вы всегда можете реализовать его самостоятельно, но это похоже на переосмысление велосипеда –

ответ

1

Вы можете сделать что-то вроде этого. Объясните, что вам нужно, пожалуйста.

char szFirstStr[] = "StackOverflow, flowers and vine."; 
strcpy(szFirstStr, szFirstStr + 15); 
std::cout << szFirstStr << std::endl; 

Будет выдавать "цветы и виноград".

Использование c строк не является хорошим стилем для программиста на C++, используйте класс std::string.

0

Ваш код явно синтаксически неверен, но, я думаю, вы об этом знаете.

Ваша переменная t действительно представляет собой массив символов, и у вас есть указатель, указывающий на первый символ этого массива символов, например, у вас есть указатель, указывающий на первый символ нулевой строки. Что вы можете сделать, так это изменить значение указателя, чтобы указать на новую начальную точку вашей строки.

Вы можете либо это сделать, либо если вы действительно используете массив, вы можете скопировать указатель новой отправной точки, которую хотите использовать. Таким образом, если данные, которые вы хотите скопировать находится в памяти, на которую указывает:

const char* str = "Stackoverflow is an online website"; 

Это выглядит следующим образом в памяти:

     Stackoverflow is an online website\0 
str points to:  --^ 

Если вы хотите, чтобы указать на другой отправной точки вы можете изменить указатель на точку на другой стартовой позиции:

    Stackoverflow is an online website\0 
str + 14 points to: --------------^ 

Вы можете передать адрес из «я», чтобы ваш strcpy, например, так:

Очевидно, что вы не знаете, какой размер обрезать без анализа (14), то, что вы можете сделать, это поиск строки для первого символа, следующего за пробелом.

// Notice that this is just a sample of a search that could be made 
// much more elegant, but I will leave that to you. 
const char* FindSecondWord(const char* strToSearch) { 
    // Loop until the end of the string is reached or the first 
    // white space character 
    while (*strToSearch && !isspace(*strToSearch)) strToSearch++; 
    // Loop until the end of the string is reached or the first 
    // non white space character is found (our new starting point) 
    while (*strToSearch && isspace(*strToSearch)) strToSearch++; 
    return strToSearch; 
} 

strcpy(t, FindSecondWord("Stackoverflow is an online website")); 

cout << t << endl; 

Этот выход будет: представляет собой интернет-сайт

Поскольку это, скорее всего, назначение школы, я пропущу лекцию о более современных C++ обработки строки, как я ожидал что-то делать с указателями обучения. Но, очевидно, это очень низкая модификация строки.

0

Как начинающий, зачем делать это сложнее, чем это действительно должно быть?

Использование станд :: строка

и

зиЬзЬг() Link