首页 > 解决方案 > 替换二维数组中的字符

问题描述

编辑***

我无法替换二维数组中的字符。最初,我的代码从文本文件中读取数据并将数据存储在临时字符串中。我对如何用不同的字符替换字符感到困惑。我使用了嵌套的 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++ 还很陌生。

标签: c++

解决方案


您想使用字符串替换来让您的生活更轻松!

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

#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**~
****************

推荐阅读