[英]Remove spaces from a string in C++
我目前正在學習C ++。 我正在嘗試編寫一個方法來從字符串中刪除空格並返回沒有空格的字符串這是我的代碼:
string removeSpaces(string input)
{
int length = input.length();
for (int i = 0; i < length; i++) {
if(input[i] == ' ')
input.erase(i, 1);
}
return input
}
但這有一個錯誤,因為它不會刪除雙或三個空格。 我在網上發現了這個
s.erase(remove(s.begin(),s.end(),' '),s.end());
但顯然這是返回一個iterator
(如果我理解的話)有沒有辦法將iterator
轉換回我的字符串input
? 最重要的是這是正確的方法嗎?
std::string::erase
返回一個迭代器,但你不必使用它。 您的原始字符串已被修改。
string removeSpaces(string input)
{
input.erase(std::remove(input.begin(),input.end(),' '),input.end());
return input;
}
std :: remove_if以及erase
會更容易( 看到它直播 ):
input.erase(remove_if(input.begin(), input.end(), isspace),input.end());
使用std :: isspace有利於它捕獲所有類型的空白區域。
假設您的輸入具有雙倍空格,例如“c ++ [] []是[] fun”( [ ]
表示單個空格)。 第一個空格有索引3(編號從0開始),第二個空格當然是索引4。
在你的for
循環中,當你點擊i == 3
你會刪除第一個空格。 循環的下一次迭代需要i == 4
作為索引。 但現在是指數4的第二個空間嗎? 沒有! 刪除第一個空格將字符串更改為“c ++ [] is [] fun”:要刪除的空間再次位於索引3處!
解決方案可以是從右到左刪除空格:
for (int i = length-1; i >= 0; --i) {
if(input[i] == ' ')
input.erase(i, 1);
}
這種解決方案具有簡單的優點,但正如Tony D指出的那樣,它效率不高。
這也應該工作 - std::replace( input.begin(), input.end(), ' ', '');
您需要包含<algorithm>
這段代碼應該有效
string removeSpaces(string input)
{
int length = input.length();
for (int i = 0; i < length; i++) {
if(input[i] == ' ')
{
input.erase(i, 1);
length--;
i--;
}
}
return input
}
原因:如果它在字符串中獲得空間,它將減少字符串的長度,因此您必須相應地更改變量:“length”。
我試着寫點東西。 此函數接受一個字符串並將所有內容復制到另一個臨時字符串,而不包含額外空格
std::string trim(std::string &str){
int i = 0;
int j = 0;
int size = str.length();
std::string newStr;
bool spaceFlag = false;
for(int i = 0;i < size; i++){
if(str[i] == ' ' && (i+1) < size && str[i+1] == ' '){
i++;
spaceFlag = true;
continue;
}
if(str[i] == ' '){
newStr += " ";
continue;
}
if(str[i] == '\t' && i != 0){
str[i] = ' ';
newStr += " ";
}
else{
newStr += str[i];
if(spaceFlag){
newStr += " ";
spaceFlag = false;
}
}
}
str = newStr;
return str;
}
#include<iostream>
#include<string.h>
using namespace std;
void trimSpace(char s[])
{
int i=0, count=0, j=0;
while(s[i])
{
if(s[i]!=' ')
s[count++]=s[i++];
else {
s[count++]=' ';
while(s[i]==' ')
i++;
}
}
s[count]='\0';
cout<<endl<<" Trimmed String : ";
puts(s);
}
int main()
{
char string[1000];
cout<<" Enter String : ";
gets(string);
trimSpace(string);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.