Я пытаюсь добавить пробел в середину массива символов.Не уверен, как правильно его двигать - PullRequest
0 голосов
/ 04 февраля 2019

Я проверяю массив на конец предложения, а затем проверяю, есть ли пробел после конца предложения.Я пытаюсь переместить весь массив 1 вправо, чтобы освободить место для пробела.userPara[] это просто введенный пользователем массив символов.Я НЕ МОГУ использовать строки, но могу использовать строку класса

void add_whitespace(char userPara[])
{
    int len = strlen(userPara);
    int newlen = len + 1;
    char temp1;
    char temp2;
    char whitespace = ' ';
    for (int i = 0; i < newlen; i++) {
        if (userPara[i-1] == '.' || userPara[i-1] == '?' || userPara[i-1] == 
            '!' && userPara[i] != ' ') {
            temp1 = userPara[i];
            userPara[i] = whitespace;
            for (int j = i; j < newlen; j++) {
                temp2 = userPara[j+1];
                userPara[j+1] = temp1;
                temp1 = userPara[j+2];
                userPara[j+2] = temp2;
                cout << userPara << endl; //This is for testing
            }
         }
     }
}

, кажется, что он просто перемещает первый элемент [j + 1] вправо, пока этот элемент не выйдет из строки

1 Ответ

0 голосов
/ 04 февраля 2019

Поскольку в вашем внутреннем for вы сдвигаете вправо на два элемента userPara, вам следует увеличить счетчик на 2 (j+=2, а не j++).Одним из примеров для вашей цели может быть следующее:

for (int i = 0; i < n; i++) {
    if(userPara [i] == '.')
    {
        temp1 = userPara [i];
        userPara [i] = ' ';
         for (int j = i+1; j < n; j+=2)
         {
            temp2 = userPara [j];
            userPara [j] = temp1;
            temp1 = userPara [j+1];
            userPara [j+1] = temp2;
         }
    break;    
    }

}

. Как обсуждено в комментариях, обратите внимание, что у этого подхода могут быть проблемы, связанные с этим слепым увеличением массива.

...