替换二维数组中的字符

时间:2019-12-01 22:39:47

标签: c++

编辑***

我在替换二维数组中的字符时遇到麻烦。最初,我的代码从文本文件读取并将数据存储在临时字符串中。我对如何用其他字符替换字符感到困惑。我使用嵌套的for循环,但是代码不起作用。感谢您的帮助!

我正在尝试将p替换为'*',将w替换为'〜'

string temp;      
string arr3[25][16];
arr1[16];
int i =0;
int j =0; 
ifstream inputfiles; 

inputfiles.open("mapPoke.txt"); 

if (inputfiles.is_open())
{
    while (getline(inputfiles, temp))
    {
        split(temp, ',', arr1, 16);
        arr3[i][j] = temp;
        for (int i = 0; i < 25; i++)
        {
            for (int j = 0; j < 16; j++)
            {
                if (temp[j] == 'p'){
                    temp[j] = '*';   
                } 
                else if (temp[j] == 'w')
                {
                    temp[j] = '~';
                }
            }   
        }
    }
}

这是我要替换的数据

w,w,w,w,w,w,w,p,p,p,p,p,p,p,p,p
p,w,w,w,w,w,w,G,p,p,C,p,p,p,G,p
p,w,w,w,w,w,w,p,p,p,p,p,p,p,p,p
p,w,G,w,w,w,w,p,p,p,p,p,p,p,p,p
p,p,p,p,w,w,w,p,p,p,p,G,p,p,p,p
p,C,w,w,w,w,w,p,C,p,p,p,p,C,p,p
p,p,p,w,w,w,w,w,p,p,p,p,p,p,p,p
p,p,p,p,w,w,w,p,p,p,p,p,p,p,p,G
p,G,p,p,w,w,p,p,p,p,p,p,p,p,p,p
p,p,p,w,w,p,p,C,p,p,p,C,p,p,C,p
p,p,p,w,w,p,p,w,G,p,p,p,p,p,p,p
p,w,p,C,w,w,p,w,w,w,p,G,w,w,p,p
p,w,p,p,p,w,p,p,p,p,p,p,w,w,w,G
p,C,G,w,w,w,p,p,p,C,p,w,w,w,w,w
p,p,w,w,w,w,w,p,p,p,p,w,w,w,w,w
p,p,w,w,w,w,w,p,p,p,p,w,w,w,w,w
p,p,p,w,w,w,w,w,w,p,p,p,w,w,w,w
p,G,p,w,w,w,w,w,w,C,p,p,w,w,w,w
p,p,w,w,w,w,w,w,p,p,p,w,w,w,w,w
p,p,w,w,w,w,w,w,G,p,C,w,w,w,w,w
p,p,w,w,w,w,w,w,w,p,p,p,w,w,w,w
p,p,C,w,w,w,w,w,w,p,p,p,G,w,w,w
p,p,p,p,p,p,G,p,p,p,p,p,p,w,p,w
p,G,p,p,p,p,p,C,p,p,p,p,C,p,p,w
p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p

它具有25行16列。

我也对替换值后如何删除数组感到困惑。感谢您的帮助,对于任何错误,对于我对C ++来说还很陌生。

1 个答案:

答案 0 :(得分:0)

您想使用string replace来简化生活!

编辑:我在下面进行了测试,它适用于您的示例

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
   char arr[25][16];
   int i=0; int j=0;
   string temp; char c;

   ifstream fin("mapPoke.txt");
   if(!fin){ cerr << "Couldn't open file\n"; }

   while(getline(fin,temp)){
      if(!temp.empty()){
         //find and replace p's
         while(temp.find('p') != string::npos){
            temp.replace(temp.find('p'),1,1,'*');
         }
         //find and replace w's
         while(temp.find('w') != string::npos){
            temp.replace(temp.find('w'),1,1,'~');
         }
         //erase commas 
         while(temp.find(',') != string::npos){
            temp.erase(temp.find(','),1);
         }
         //here all w's and p's have been replaced, and commas are removed
         //uncomment the line below if you want to see the output
            //cout << temp << endl;

         //insert in array, character by character
         for(int k=0;k<temp.length();k++){
            arr[i][j++]=temp[k];
         }
         j=0;
         i++;
      }
   }
   fin.close();


   //and to cout the 2D array 
   for(i=0;i<25;i++){
      for(j=0;j<16;j++){
         cout<< arr[i][j];
      }
      cout<<endl;
   }
   return 0;
}

输出为:

~~~~~~~*********
*~~~~~~G**C***G*
*~~~~~~*********
*~G~~~~*********
****~~~****G****
*C~~~~~*C****C**
***~~~~~********
****~~~********G
*G**~~**********
***~~**C***C**C*
***~~**~G*******
*~*C~~*~~~*G~~**
*~***~******~~~G
*CG~~~***C*~~~~~
**~~~~~****~~~~~
**~~~~~****~~~~~
***~~~~~~***~~~~
*G*~~~~~~C**~~~~
**~~~~~~***~~~~~
**~~~~~~G*C~~~~~
**~~~~~~~***~~~~
**C~~~~~~***G~~~
******G******~*~
*G*****C****C**~
****************