2014-09-07 2 views
0

Я пишу программу на C++, используя функции ifstream ofstream. Я спрашиваю у пользователя, какой файл открыть, а затем спросить их, как назвать файл. Ознакомьтесь с приведенным ниже кодом и помогите мне выяснить, как правильно использовать функцию добавления.Добавление расширения файла в C++-прогаме

cout << "Please type the new name for your file (File must end in '.txt'): "; 
cin>>outf; // stores name of requested txt file 
if (!outf.rfind(".txt")) 
{ 
outf.append(".txt"); 
} 

могли бы использовать предложения ....

ответ

1

Сначала вам нужна функция, чтобы спросить, если строка заканчивается на «.txt». outf.rfind(".txt") найдет строку «.txt» в любом месте в строке. (rfind() отличается от find() в том, что он начинает поиск с конца, но он может найти матч в любом месте строки.)

bool ends_with(std::string const & str, std::string const & suffix) 
{ 
    // If the string is smaller than the suffix then there is no match. 
    if (str.size() < suffix.size()) { return false; } 

    return 0 == str.compare(str.size() - suffix.size(), 
          suffix.size(), 
          suffix, 
          0, 
          suffix.size()); 
} 

Теперь мы можем просто использовать std::string «s += перегрузки оператора для добавления к строке, если эта функция возвращает ложь:

if (!ends_with(outf, ".txt")) { 
    outf += ".txt"; 
} 

(See a live demo.)

+0

Я ценю помощь. глядя на ваш профиль, я вижу, что у вас есть целый мир знаний, поэтому вы мне очень благодарны. Поскольку я немного новичок в программировании на С ++, я не мог полностью понять все, что вы здесь поставили ... но ваш ответ поставил меня в правильном направлении и был менее сложным. Пожалуйста, см. Мой ответ – Jeremy

+0

@Jeremy К сожалению, ваш подход по-прежнему неверен. Если вам нужна помощь в понимании моего ответа, просто спросите здесь. Мы можем перейти к SO-чату, и я был бы рад прояснить все. – cdhowie

0

Предыдущий ответ поставил меня в правильном направлении, и это работало на то, что я искал ... hopef Это помогает кому-то еще искать то же самое.

cout << "Please type the new name for your file (File must end in '.XML'): "; 
cin>>outf; // stores name of requested xml file 

string y=".xml"; 
if (outf.rfind(".xml")!= true) 
{ 
    outf.append(y); 
} 
+0

Теперь попробуйте это с помощью 'outf =" a.txt.zip ";'. Вы не добавите '.txt', потому что имя содержит' .txt' - но это еще не конец! Вот почему в моем ответе вам нужна функция 'ends_with()'. – cdhowie

+0

Я действительно обнаружил недостаток этим утром ... когда я случайно добавил неправильное расширение файла. Я снова просмотрел ваш ответ, затем заметил, что вы добавили живое демо ... Еще раз спасибо, и спасибо за терпение ... – Jeremy

Смежные вопросы