что эта программа (реверсирование строки) в C не работает? - PullRequest
1 голос
/ 09 марта 2012
#include<stdio.h>
int main()
{
    int i,n=0;
char str[]="karthik";
while(*(str+n)!='0')
n++;
for(i=0;i<n/2;i++)
{char temp=str[i];
str[i]=str[n-i-1];str[n-i-1]=temp;
}
printf("%s",str);
}

Я знаю, что это довольно распространенный вопрос, но когда я пытался, я не получаю никаких выходных данных. Я знаю, что в двух строках ниже есть какая-то ошибка, потому что когда я использовал strlen (), это работало хорошо.

while(*(str+n)!='0')
n++;

поэтому, пожалуйста, скажите, почему так неправильно использовать. пожалуйста, помните, я новичок в C

Ответы [ 4 ]

3 голосов
/ 09 марта 2012
while(*(str+n)!='0') 
n++; 

Идея состоит в том, чтобы перебрать массив по всей длине строки.
Вы должны проверить на \0. Поскольку строки c завершаются нулем (\0)

while(*(str+n)!='\0')
                 ^^

Кроме того, отметим, что вы должны вернуть значение из вашей функции main(), не имеющее отношения к проблеме, но это хорошая практика.

1 голос
/ 09 марта 2012

В дополнение к проблеме нулевого завершения вы должны принять традиционный стиль кодирования.Один пример:

#include <stdio.h>

int main()
{
  int i;
  int n=0;
  char str[]="karthik";

  while(str[n] != '\0')
  {
    n++;
  }

  for(i=0; i<n/2; i++)
  {
    char temp=str[i];
    str[i]=str[n-i-1];
    str[n-i-1]=temp;
  }

  printf("%s",str);

  return 0;
}
1 голос
/ 09 марта 2012

Конец массива символов в c == '\0'

0 голосов
/ 09 марта 2012

Проверьте наличие значения NULL в цикле while.Изменить с

while(*(str+n)!='0')

на

while(*(str+n)!='\0')
...