簡體   English   中英

從向量中刪除雙引號<string> c++ 98</string>

[英]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][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;
}

Output:

50 40 50GB 40GB 60

str[p]給你一個string&所以一個對字符串的引用。 然后你做另一個[] ,所以str[p][i]給你一個char& 然后,您嘗試將其與" \" "進行比較,后者是 c 樣式的字符串(即char const * )。這不起作用。

我認為您正在嘗試將其與'"'進行比較,因此 char 表示雙引號。這樣您可以將蘋果與蘋果進行比較。

除了:

考慮一下如果你在字符串中加入""會發生什么。 擦除第一個,然后在幾秒鍾后繼續迭代,因為你的字符串現在更短了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM