logo

Poista ylimääräiset tilat merkkijonosta

Annetaan merkkijono, joka sisältää monia peräkkäisiä tiloja, leikkaa kaikki tilat niin, että kaikkien sanojen tulisi sisältää Vain yksi tila niiden välillä. Muuntaminen tulisi tehdä paikalleen ja ratkaisujen tulisi käsitellä taka- ja johtavia tiloja ja poistettava myös edelliset tilat ennen yleisiä välimerkkejä, kuten täysi pysäytysraima ja kysymysmerkki.

Esimerkkejä: 



    Input:      
str = ' Hello Geeks . Welcome to GeeksforGeeks . ';
Output:
'Hello Geeks. Welcome to GeeksforGeeks.'
Input:
str = 'GeeksforGeeks';
Output:
'GeeksforGeeks'
(No change is needed)


Tämä ongelma on laajennus Poista tilat tietystä merkkijonosta

Menetelmä 1:

  • Ajatuksena on ylläpitää 2 osoitinta. Aluksi molemmat viittaavat taulukon alkuun.
  • Ensimmäinen osoitin seuraa seuraavaa sijaintia, joka on täytettävä lähtömerkkijono.
  • Toinen osoitin on lisätty lukemaan kaikki merkkijonon merkit yksi kerrallaan.
  • Löydettyään minkä tahansa ei-avaruushahmon hahmo kopioidaan ensimmäisen osoittimen sijaintiin ja sitten sekä ensimmäinen että toinen osoitin on edistetty.
  • Jos ei-avaruushahmo on täydellinen pysäytyskorva tai kysymysmerkki, poistamme myös ennen sitä edellisen tilan.
  • Kun löydät peräkkäiset avaruushahmot, yksi tila kopioidaan ensimmäisen osoittimen sijaintiin ja lepo jätetään huomiotta. Johtamis- ja takaosat hoidetaan erikseen liuoksessa.


Alla on yllä olevan idean C ++ -toteutus.



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); 

Lähtö:  

b+ puita
Hello Geeks. Welcome to GeeksforGeeks.  


Ajan monimutkaisuus yllä olevasta liuoksesta on O (n).
Aputila on O (1), kun muuntaminen tehdään paikallaan.

Menetelmä 2:
Toinen ratkaisu käyttämällä ennalta määritettyjä funktioita Pythonissa 3: 



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); 

Lähtö:   

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

Ajan monimutkaisuus yllä olevasta liuoksesta on O (n). 
Aputila on o (n), koska toinen luettelo oli luotava. 

Menetelmä 3: (Käyttämällä sisäänrakennettua toimintoa)

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> 

Lähtö:  

Hello Geeks . Welcome  Do you love Geeks  Geeks ?  

Ajan monimutkaisuus : O (n) missä n on merkkijonon merkkejä. 
Aputila: O (1) Koska on vain pieniä kirjaimia.


Tämän artikkelin on annettu Aarti_rathi ja Aditya Goel .