Я что-то упустил в своей функции? - PullRequest
2 голосов
/ 13 декабря 2010

Это то, что у меня есть, и я получаю сообщение об ошибке. Любая помощь?

void ReverseString(char* string) {
    int len = strlen(string);
    for(int i = 0; i < len; i++)
    {
         string[i] = string[len-i];
    }
}

Ответы [ 5 ]

6 голосов
/ 13 декабря 2010
  • Когда i равно 0, вы получите доступ string[len] что неверно как действительный индекс в массиве длины len являются [0,len-1]

Если я правильно понимаю ваше намерение, вы пытаетесь изменить строку, но я вижу, что пропущено несколько вещей:

  • Вы не обмениваетесь.
  • Также обмен должен произойти для одна половина массива, не для весь массив.

Следующий фрагмент исправляет эти проблемы:

int len = strlen(string);
for(int i = 0; i < len/2; i++) {
    swap(string[len-i-1],string[i]);
}
2 голосов
/ 13 декабря 2010

Прежде всего, вы получите сообщение об ошибке в строке 6.

Измените { на }. Затем попробуйте снова.

1 голос
/ 13 декабря 2010

Это тег C ++, делайте это C ++ ...

std::string ReverseString(std::string str) 
{
  std::reverse(str.begin(), str.end());
  return str;
}
1 голос
/ 13 декабря 2010

Помимо двух уже упомянутых ошибок:

Вы сделаете палиндром из исходной строки.Первая половина станет равной второй половине перевернутой.Однако второй тайм останется прежним.Это не то, что объявляет имя функции.

0 голосов
/ 13 декабря 2010

должно быть string[i] = string[len-i-1];

// added (untested):  

void ReverseString(char * string) {   
    int len = strlen(string);  
    for(int i = 0; i < len / 2; i++)  
    {  
         string[i] ^= string[len-i-1];  
         string[len-i-1] ^= string[i];  
         string[i] ^= string[len-i-1];  
    }  
} 
...