#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
string url = "abcd "; // four spaces
string rev = url;
reverse(rev.begin(), rev.end());
cout << "There are " << strspn(rev.c_str(), " ") << " trailing spaces." << endl;
return 0;
}
Мы можем сделать это без реверсирования строки, так и без использования функции C, как strspn
. Например, найдите функцию string::find_last_not_of
. Он найдет последний символ в строке, которая не находится в указанном наборе, и вернет ее позицию. Если ваш набор - это " "
(пробел), то он находит последний непространственный символ. Разница между этой позицией и длиной строки - это количество конечных пробелов.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string url = "abcd "; // four spaces
size_t last_nonspace = url.find_last_not_of(" ");
cout << "There are " << url.length() - last_nonspace - 1 << " trailing spaces." << endl;
return 0;
}
Обратите внимание, что если нет не пробел в строке (строка пустой или содержит только пробелы), функция возвращает find_last_not_of
string::npos
который только (size_t) -1
, наибольшее значение size_t
. Когда это вычитается из длины, а затем вычитается 1, результирующее значение равно только длине. Арифметика работает во всех случаях.
Если ваш код работает должным образом, и вы хотите, чтобы ваш код был пересмотрен, возможно, наиболее подходящим местом является http://codereview.stackexchange.com/. Спасибо. –
cout ясно известно, что это C++-программа. почему тег 'c' ??? – sharon
Возьмите одну целую переменную для длины url, не используйте 'url.length();' in for loop. – Himanshu