Ваш код должен работать, но, вероятно, есть проблема в основной функции, например, с вашими массивами и тем фактом, что вы должны использовать два, поэтому одной из причин, по которой я вижу такое поведение, может быть то, что размеры вашего массива не совпадаютдруг друга, и тот, в котором хранятся исходные строки, больше, чем тот, в который вы копируете.
#include <string>
#include <iostream>
int main() {
const int SIZE = 5;
string oldArray[SIZE] = {"He,llo", "Wor,ld", "H,ow", "Ar,e.", "Y,O,U"};
string newArray[SIZE];
for (int i = 0; i < 5; ++i) {
// Moved this into the loop for ease, otherwise your
// original code would have kept appending to this
// newString variable unless you cleared it later
std::string newString = "";
for (int x = 0; x < oldArray[i].length(); ++x) {
char current = oldArray[i].at(x);
if (ispunct(current) == 0)
{
newString += current;
}
}
newArray[i] = newString;
}
for (int i = 0; i < 5; ++i) {
std::cout << newArray[i] << '\n';
}
}
Это в основном ваш код, с несколькими изменениями, чтобы решить проблему конкатенации, сохраняющую newString
вокругно без очистки позже.
Вы можете сделать эту проблему более кратко, используя материал std <algorithm>
и <vector>
, который будет обрабатывать рост и изменение размера для вас.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
int main() {
std::vector<std::string> stringsToCopy;
stringsToCopy.push_back("Hel,lo,");
stringsToCopy.push_back("th,ere.");
// Make a copy of the other vector, since it seems like you want to keep
// the original data. This will copy all the elements from the stringsToCopy
// vector.
std::vector<std::string> newStrings = stringsToCopy;
// simplicity, but you could use an iterator as well, which would be
// more verbose
for (int i = 0; i < newStrings.size(); ++i) {
// get a reference to the current string in the
// vector for convenience, so we can use a shorter
// name for it
std::string& s = newStrings[i];
// because remove_if doesn't actually delete things from a
// container, we should also call the string's erase method
s.erase(std::remove_if(s.begin(), s.end(), ispunct), s.end());
}
for (int i = 0; i < newStrings.size(); ++i) {
std::cout << newStrings[i] << '\n';
}
}