什么是尾随空格?它与空白有什么区别?

20

什么是尾随空格,与空格之间有什么区别?

我看到了一道关于尾随空格的练习。

我不认为这个问题有什么影响,因为 cin 可以忽略那些空格,并且只捕获数字?

3个回答

33

尾随空格是指位于行末的所有 空白字符,没有其他字符跟在它后面。这包括空格(你所说的空格)以及制表符\t、回车\r等。有25个Unicode字符被视为空白字符,在维基百科上列出了这些字符。(链接)


1
我个人希望区分尾随的空格和尾随的空白字符,但也许这只是一个术语问题。 - erik258
这是一个很好的观点。应该根据您的具体应用程序来决定应该删除哪些尾随空格。这可能只是空格和制表符。 - LeonardBlunderbuss
当我们在C++中使用例如函数cin进行输入时,它们会被忽略,对吗? - user12448
是的,cin会忽略末尾的空格。 - LeonardBlunderbuss
这是我遇到那个术语的问题所在! http://www.codechef.com/MARCH14/problems/PROSUM/ - user12448
1
cin 如何“忽略尾随空格”,同时又能确定行末,如果它忽略了包括 '\n' 在内的空格?难道空格的相关性不是由使用 cin 的函数而不是 cin 本身决定的吗? - chux - Reinstate Monica

4
【关于"尾随空格"和"空白"的区别】
在一行文字末尾的空白被称为"尾随空格"。而在字符(或单词、数字)之间出现的空白则不是"尾随空格"。
【什么是"尾随空格"?】
"尾随空格"曾经让我在编码时遇到问题,因此我创建了以下实用程序例程。对于这个特定的任务,我定义"尾随空格"为任何在行末的"空白"(即"white space")。(是的,我还为前导空白和多余的空白(即在行中超过1个空白字符)创建了版本)。
const char* DTB::whitespaces = "\t\n\v\f\r ";
//                               0 1 2 3 4 5
// 0)tab, 1)newline, 2)vertical tab, 3)formfeed, 4)return, 5)space,


void DTB::trimTrailingWhiteSpace(std::string& s)
{
   do // poor man's try block
   {
      if(0 == s.size())  break;  // nothing to trim, not an error or warning

      // search from end of s until no char of 'whitespaces' is found
      size_t found = s.find_last_not_of(DTB::whitespaces);

      if(std::string::npos == found)  // none found, so s is all white space
      {
         s.erase(); // erase the 'whitespace' chars, make length 0
         break;
      }

      // found index to last not-whitespace-char
      size_t trailingWhitespacesStart = found + 1; // point to first of trailing whitespace chars
      if(trailingWhitespacesStart < s.size())      // s has some trailing white space
      {
         s.erase(trailingWhitespacesStart); // thru end of s
         break;
      }

   }while(0);

} // void trimTrailingWhiteSpace(std::string& s)

3

在编程中,拖尾空格(我想你指的是这个)是指字符串或行末的一系列空格。

以下情况下它们可能会引起一些麻烦:

  • 您可能有一个跨越多行的字符串字面量,在这种情况下,调试拖尾空格可能会很棘手

  • 当您必须在一行上输入附加内容时,总是需要手动“修复”这些内容,这会减缓开发过程

  • 一些解析工具可能会遇到问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接