从 vector<string> c++ 98 中删除双引号
To remove double quotes from vector<string> c++ 98
我正在尝试从我的矢量字符串值中删除双引号字符。
例如:如果我的矢量字符串具有值 (50,40,"50GB","40GB",60)。我正在尝试通过擦除双引号 (" ") 来优化向量。所以我的最终矢量 (50,40,50GB,40GB,60).
下面是我试图让它工作的一段代码,我遇到了编译问题...请帮助我解决这个问题并达到预期的结果。
In function ‘void removeCharsFromVectorString(std::vector<std::basic_string<char> >&)’:
strErase.cpp:28:27: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
if(str[p][i] == " \" ")
Code:
#include <iostream>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
void removeCharsFromVectorString( vector<string> &str)
{
for(int p = 0; p < str.size(); p++)
{
for ( unsigned int i = 0; i < str[p].length() ; ++i )
{
if(str[p][i] == " \" ")
{
str[p].erase(i, 1);
i--;
}
//str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
}
}
for(int p = 0; p < str.size(); p++)
{
cout<<str[p]<<endl;
}
}
int main()
{
vector<string> str;
str.push_back("50");
str.push_back("40");
str.push_back("\"50GB\"");
str.push_back("\"40GB\"");
str.push_back("60");
removeCharsFromVectorString(str);
return 0;
}
str[p]
给你一个 string&
所以一个字符串的引用。然后你再做一个 []
,所以 str[p][i]
给你一个 char&
。然后你尝试将它与 " \" "
进行比较,后者是一个 c 风格的字符串(即 char const *
)。这行不通。
我认为您正试图将它与 '"'
进行比较,因此 char 表示双引号。这样您就可以将苹果与苹果进行比较。
此外:
考虑一下如果您在字符串中遇到 ""
会发生什么。擦除第一个,然后在秒后继续迭代,因为您的字符串现在更短了。
str[p][i]是char类型的,所以需要和char比较。将双引号放在两个单引号中应该可以解决问题:
if(str[p][i] == '"')
{
str[p].erase(i, 1);
i--;
}
完整代码:
#include <iostream>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
void removeCharsFromVectorString( vector<string> &str)
{
for(int p = 0; p < str.size(); p++)
{
for ( unsigned int i = 0; i < str[p].length() ; ++i )
{
if(str[p][i] == '"')
{
str[p].erase(i, 1);
i--;
}
//str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
}
}
for(int p = 0; p < str.size(); p++)
{
cout<<str[p]<<endl;
}
}
int main()
{
vector<string> str;
str.push_back("50");
str.push_back("40");
str.push_back("\"50GB\"");
str.push_back("\"40GB\"");
str.push_back("60");
removeCharsFromVectorString(str);
return 0;
}
输出:
50
40
50GB
40GB
60
我正在尝试从我的矢量字符串值中删除双引号字符。
例如:如果我的矢量字符串具有值 (50,40,"50GB","40GB",60)。我正在尝试通过擦除双引号 (" ") 来优化向量。所以我的最终矢量 (50,40,50GB,40GB,60).
下面是我试图让它工作的一段代码,我遇到了编译问题...请帮助我解决这个问题并达到预期的结果。
In function ‘void removeCharsFromVectorString(std::vector<std::basic_string<char> >&)’:
strErase.cpp:28:27: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
if(str[p][i] == " \" ")
Code:
#include <iostream>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
void removeCharsFromVectorString( vector<string> &str)
{
for(int p = 0; p < str.size(); p++)
{
for ( unsigned int i = 0; i < str[p].length() ; ++i )
{
if(str[p][i] == " \" ")
{
str[p].erase(i, 1);
i--;
}
//str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
}
}
for(int p = 0; p < str.size(); p++)
{
cout<<str[p]<<endl;
}
}
int main()
{
vector<string> str;
str.push_back("50");
str.push_back("40");
str.push_back("\"50GB\"");
str.push_back("\"40GB\"");
str.push_back("60");
removeCharsFromVectorString(str);
return 0;
}
str[p]
给你一个 string&
所以一个字符串的引用。然后你再做一个 []
,所以 str[p][i]
给你一个 char&
。然后你尝试将它与 " \" "
进行比较,后者是一个 c 风格的字符串(即 char const *
)。这行不通。
我认为您正试图将它与 '"'
进行比较,因此 char 表示双引号。这样您就可以将苹果与苹果进行比较。
此外:
考虑一下如果您在字符串中遇到 ""
会发生什么。擦除第一个,然后在秒后继续迭代,因为您的字符串现在更短了。
str[p][i]是char类型的,所以需要和char比较。将双引号放在两个单引号中应该可以解决问题:
if(str[p][i] == '"')
{
str[p].erase(i, 1);
i--;
}
完整代码:
#include <iostream>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
void removeCharsFromVectorString( vector<string> &str)
{
for(int p = 0; p < str.size(); p++)
{
for ( unsigned int i = 0; i < str[p].length() ; ++i )
{
if(str[p][i] == '"')
{
str[p].erase(i, 1);
i--;
}
//str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
}
}
for(int p = 0; p < str.size(); p++)
{
cout<<str[p]<<endl;
}
}
int main()
{
vector<string> str;
str.push_back("50");
str.push_back("40");
str.push_back("\"50GB\"");
str.push_back("\"40GB\"");
str.push_back("60");
removeCharsFromVectorString(str);
return 0;
}
输出:
50 40 50GB 40GB 60