logo

Видаліть додаткові проміжки з рядка

Дано рядок, що містить багато послідовних пробілів, обрізати всі простори, щоб усі слова містяли Тільки один простір між ними. Перетворення слід здійснювати на місці, а рішення повинно обробляти задні та провідні простори, а також видаляти попередні простори перед загальною пунктуацією, як повна кома, та знак запитання.

Приклади: 



топології мережі
    Input:      
str = ' Hello Geeks . Welcome to GeeksforGeeks . ';
Output:
'Hello Geeks. Welcome to GeeksforGeeks.'
Input:
str = 'GeeksforGeeks';
Output:
'GeeksforGeeks'
(No change is needed)


Ця проблема є продовженням Видаліть проміжки із заданої рядка

Метод 1:

  • Ідея полягає в підтримці 2 покажчиків. Спочатку обидва вказують на початок масиву.
  • Перший вказівник відстежує наступну позицію, яка повинна бути заповнена у вихідному рядку.
  • Другий покажчик розвинений для читання всіх символів рядка по черзі.
  • При пошуку будь-якого небічного персонажа персонаж скопіюється в розташування першого вказівника, а потім вдосконалено і перші, і другі покажчики.
  • Якщо не-космічний символ-це повна кома-зупинка або знак запитання, ми також видаляємо будь-який попередній простір перед нею.
  • При пошуку послідовних космічних символів один простір копіюється в розташування першого вказівника та відпочинку, ігнорується. Провідні та задні місця обробляються окремо в розчині.


Нижче наведено C ++ реалізацію вищевказаної ідеї.



C++
// C++ program to implement custom trim() function #include    using namespace std; // Function to in-place trim all spaces in the // string such that all words should contain only // a single space between them. void removeSpaces(string &str) {  // n is length of the original string  int n = str.length();  // i points to next position to be filled in  // output string/ j points to next character  // in the original string  int i = 0 j = -1;  // flag that sets to true is space is found  bool spaceFound = false;  // Handles leading spaces  while (++j < n && str[j] == ' ');  // read all characters of original string  while (j < n)  {  // if current characters is non-space  if (str[j] != ' ')  {  // remove preceding spaces before dot  // comma & question mark  if ((str[j] == '.' || str[j] == '' ||  str[j] == '?') && i - 1 >= 0 &&  str[i - 1] == ' ')  str[i - 1] = str[j++];  else  // copy current character at index i  // and increment both i and j  str[i++] = str[j++];  // set space flag to false when any  // non-space character is found  spaceFound = false;  }  // if current character is a space  else if (str[j++] == ' ')  {  // If space is encountered for the first  // time after a word put one space in the  // output and set space flag to true  if (!spaceFound)  {  str[i++] = ' ';  spaceFound = true;  }  }  }  // Remove trailing spaces  if (i <= 1)  str.erase(str.begin() + i str.end());  else  str.erase(str.begin() + i - 1 str.end()); } // Driver Code int main() {  string str = ' Hello Geeks . Welcome to'  ' GeeksforGeeks . ';  removeSpaces(str);  cout << str;  return 0; } 
Java
class Main{  public static String removeSpaces(String s) {  int n = s.length();  int i = 0 j = -1;  boolean spaceFound = false;    // Handles leading spaces  while (j < n - 1 && s.charAt(j + 1) == ' ') {  j++;  }    // read all characters of original string  while (j < n) {  // if current characters is non-space  if (s.charAt(j) != ' ') {  // remove preceding spaces before dot  // comma & question mark  if ((s.charAt(j) == '.' || s.charAt(j) == '' ||  s.charAt(j) == '?') && i - 1 >= 0 &&   s.charAt(i - 1) == ' ') {  s = s.substring(0 i - 1) + s.charAt(j) + s.substring(i);  j++;  } else {  // copy current character at index i  // and increment both i and j  s = s.substring(0 i) + s.charAt(j) + s.substring(i + 1);  i++;  j++;  }    // set space flag to false when any  // non-space character is found  spaceFound = false;  } else if (s.charAt(j) == ' ') {  // If space is encountered for the first  // time after a word put one space in the  // output and set space flag to true  if (!spaceFound) {  s = s.substring(0 i) + ' ' + s.substring(i + 1);  i++;  spaceFound = true;  }  j++;  }  }    // Remove trailing spaces  if (i <= 1) {  s = s.substring(0 i);  } else {  s = s.substring(0 i - 1);  }  return s; } // Driver code public static void main(String[] args) {  String str = ' Hello Geeks . Welcome to'   + ' GeeksforGeeks . ';  str = removeSpaces(str);  System.out.println(str); }   } 
Python3
# Python code for the above approach def removeSpaces(s): # n is length of the original string n = len(s) # i points to next position to be filled in # output string/ j points to next character # in the original string i = 0 j = -1 # flag that sets to true is space is found spaceFound = False # Handles leading spaces while j < n - 1 and s[j + 1] == ' ': j += 1 # read all characters of original string while j < n: # if current characters is non-space if s[j] != ' ': # remove preceding spaces before dot # comma & question mark if ((s[j] == '.' or s[j] == '' or s[j] == '?') and i - 1 >= 0 and s[i - 1] == ' '): s = s[:i - 1] + s[j] + s[i:] j += 1 else: # copy current character at index i # and increment both i and j s = s[:i] + s[j] + s[i + 1:] i += 1 j += 1 # set space flag to false when any # non-space character is found spaceFound = False # if current character is a space elif s[j] == ' ': # If space is encountered for the first # time after a word put one space in the # output and set space flag to true if not spaceFound: s = s[:i] + ' ' + s[i + 1:] i += 1 spaceFound = True j += 1 # Remove trailing spaces if i <= 1: s = s[:i] else: s = s[:i - 1] return s # Driver Code str = ' Hello Geeks . Welcome to'  ' GeeksforGeeks . ' str = removeSpaces(str) print(str) # This code is contributed by adityasharmadev01 
C#
// C# program to implement custom trim() function using System; public class Gfg {  public static void Main()  {  string str = ' Hello Geeks . Welcome to' +  ' GeeksforGeeks . ';  removeSpaces(ref str);  Console.WriteLine(str);  }  // Function to in-place trim all spaces in the  // string such that all words should contain only  // a single space between them.  public static void removeSpaces(ref string str)  {  // n is length of the original string  int n = str.Length;  // i points to next position to be filled in  // output string/ j points to next character  // in the original string  int i = 0 j = -1;  // flag that sets to true is space is found  bool spaceFound = false;  // Handles leading spaces  while (++j < n && str[j] == ' ');  // read all characters of original string  while (j < n)  {  // if current characters is non-space  if (str[j] != ' ')  {  // remove preceding spaces before dot  // comma & question mark  if ((str[j] == '.' || str[j] == '' ||  str[j] == '?') && i - 1 >= 0 &&  str[i - 1] == ' ')  str = str.Remove(i - 1 1).Insert(i - 1 str[j++].ToString());  else  {  // copy current character at index i  // and increment both i and j  str = str.Remove(i 1).Insert(i str[j++].ToString());  i++;  }  // set space flag to false when any  // non-space character is found  spaceFound = false;  }  // if current character is a space  else if (str[j++] == ' ')  {  // If space is encountered for the first  // time after a word put one space in the  // output and set space flag to true  if (!spaceFound)  {  str = str.Remove(i 0).Insert(i ' ');  i++;  spaceFound = true;  }  }  }  // Remove trailing spaces  if (i <= 1)  str = str.Remove(i n - i);  else  str = str.Remove(i - 1 n - i + 1);  } } 
JavaScript
// JavaScript program to implement custom trim() function // Function to in-place trim all spaces in the // string such that all words should contain only // a single space between them. function removeSpaces(str) {  // n is length of the original string  let n = str.length;    // i points to next position to be filled in  // output string/ j points to next character  // in the original string  let i = 0 j = -1;    // flag that sets to true is space is found  let spaceFound = false;    // Handles leading spaces  while (++j < n && str[j] == ' ');    // read all characters of original string  while (j < n) {  // if current characters is non-space  if (str[j] != ' ') {  // remove preceding spaces before dot  // comma & question mark  if ((str[j] == '.' || str[j] == '' ||  str[j] == '?') && i - 1 >= 0 &&  str[i - 1] == ' ')  str = str.substr(0 i - 1) + str[j++] + str.substr(i);    else  // copy current character at index i  // and increment both i and j  str = str.substr(0 i++) + str[j++] + str.substr(i);    // set space flag to false when any  // non-space character is found  spaceFound = false;  }  // if current character is a space  else if (str[j++] == ' ') {  // If space is encountered for the first  // time after a word put one space in the  // output and set space flag to true  if (!spaceFound) {  str = str.substr(0 i++) + ' ' + str.substr(i);  spaceFound = true;  }  }  }    // Remove trailing spaces  if (i <= 1)  str = str.substr(0 i);  else  str = str.substr(0 i - 1);    return str; } // Driver Code let str = ' Hello Geeks . Welcome to' + ' GeeksforGeeks . '; str = removeSpaces(str); console.log(str); 

Вихід:  

Hello Geeks. Welcome to GeeksforGeeks.  


Складність часу вище розчину - o (n).
Допоміжний простір є O (1), оскільки перетворення проводиться на місці.

Метод 2:
Ще одне рішення з використанням заздалегідь визначених функцій у Python 3: 



java отримує поточну дату
C++
#include    #include  int main() {  std::string input_string = ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? ';  std::string output_string;  bool space_flag = false; // Flag to check if spaces have occurred  for (size_t index = 0; index < input_string.length(); ++index) {  if (input_string[index] != ' ') {  if (space_flag) {  if (input_string[index] == '.' || input_string[index] == '?' || input_string[index] == '') {  // Do nothing  } else {  output_string += ' ';  }  space_flag = false;  }  output_string += input_string[index];  } else if (index > 0 && input_string[index - 1] != ' ') {  space_flag = true;  }  }  std::cout << output_string << std::endl;  return 0; } 
Java
public class Main {  public static void main(String[] args) {  String inputString = ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? ';  String outputString = '';  boolean spaceFlag = false; // Flag to check if spaces have occurred  for (int index = 0; index < inputString.length(); ++index) {  if (inputString.charAt(index) != ' ') {  if (spaceFlag) {  if (inputString.charAt(index) == '.' || inputString.charAt(index) == '?' || inputString.charAt(index) == '') {  // Do nothing  } else {  outputString += ' ';  }  spaceFlag = false;  }  outputString += inputString.charAt(index);  } else if (index > 0 && inputString.charAt(index - 1) != ' ') {  spaceFlag = true;  }  }  System.out.println(outputString);  } } 
Python3
# Python program to Remove  # extra spaces from a string input_string =  ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? ' output_string = [] space_flag = False # Flag to check if spaces have occurred for index in range(len(input_string)): if input_string[index] != ' ': if space_flag == True: if (input_string[index] == '.' or input_string[index] == '?' or input_string[index] == ''): pass else: output_string.append(' ') space_flag = False output_string.append(input_string[index]) elif input_string[index - 1] != ' ': space_flag = True print (''.join(output_string)) 
C#
using System; class Program {  static void Main()  {  string inputString = ' Hello Geeks . Welcome to GeeksforGeeks  Do you love Geeks  Geeks ? ';  char[] outputArray = new char[inputString.Length]; // Using char array for efficient string building  int outputIndex = 0;  bool spaceFlag = false; // Flag to check if spaces have occurred  for (int index = 0; index < inputString.Length; ++index)  {  if (inputString[index] != ' ')  {  if (spaceFlag)  {  // Check if the current character is a punctuation mark  if (inputString[index] == '.' || inputString[index] == '?' || inputString[index] == '')  {  // Do nothing  }  else  {  outputArray[outputIndex++] = ' ';  }  spaceFlag = false;  }  outputArray[outputIndex++] = inputString[index];  }  else if (index > 0 && inputString[index - 1] != ' ')  {  spaceFlag = true;  }  }  string outputString = new string(outputArray 0 outputIndex); // Convert char array to string  Console.WriteLine(outputString);  } } 
JavaScript
let inputString = ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? '; let outputString = ''; let spaceFlag = false; // Flag to check if spaces have occurred for (let index = 0; index < inputString.length; ++index) {  if (inputString[index] !== ' ') {  if (spaceFlag) {  if (inputString[index] === '.' || inputString[index] === '?' || inputString[index] === '') {  // Do nothing  } else {  outputString += ' ';  }  spaceFlag = false;  }  outputString += inputString[index];  } else if (index > 0 && inputString[index - 1] !== ' ') {  spaceFlag = true;  } } console.log(outputString); 

Вихід:   

Hello Geeks. Welcome to GeeksforGeeks. Do you love Geeks Geeks?  

Складність часу вище розчину - o (n). 
Допоміжний простір є o (n), як довелося створити інший список. 

Метод 3: (Використання вбудованої функції)

встановити maven
C++
#include    #include  #include  int main() {  std::string str = ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? ';    // Use regular expression to replace multiple spaces with a single space  std::regex pattern('\s+');  std::string result = std::regex_replace(str pattern ' ');    // Remove leading and trailing spaces  size_t firstNonSpace = result.find_first_not_of(' ');  size_t lastNonSpace = result.find_last_not_of(' ');    if (firstNonSpace != std::string::npos && lastNonSpace != std::string::npos) {  result = result.substr(firstNonSpace lastNonSpace - firstNonSpace + 1);  }    std::cout << result << std::endl;    return 0; } // code contributed by shinjanpatra 
Java
/** Java Program to remove extra spaces from a string **/ public class GFG {  public static void main(String args[]) {  String str = ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? ';  System.out.println(str.replaceAll('\s+'' ').trim());  } } 
Python3
# Python program to remove extra spaces from a string # Input string str = ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? ' # Removing extra spaces using regex import re str = re.sub('s+' ' ' str).strip() # Printing the final string print(str) 
C#
// C# Program to remove // extra spaces from a string using System; class Program {  static void Main(string[] args)  {  string str  = ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? ';  // Removing extra spaces using regex and print  Console.WriteLine(  System.Text.RegularExpressions.Regex.Replace(  str.Trim() @'s+' ' '));  } } 
JavaScript
<script> // JavaScript Program to remove // extra spaces from a string var str = ' Hello Geeks . Welcome  Do you love Geeks  Geeks ? '; document.write(str.replace('\s+' ' ').trim()); // This code is contributed by rdtank </script> 

Вихід:  

Hello Geeks . Welcome  Do you love Geeks  Geeks ?  

Складність часу : O (n), де n - кількість символів у рядку. 
Допоміжний простір: O (1), оскільки існують лише малі літери.


Ця стаття сприяє Aarti_rathi і Адітя Гель .