2013-12-05 5 views
0

Я просто хочу изменить строку, используя для цикла и массива. Не хотите использовать какую-либо предопределенную функцию. Я использовал следующий код, но почти ничего. Пожалуйста, поделитесь некоторыми хорошими предложениями.string reverse with loop and array in c

int main(){ 
char a[]="this is a man"; 
char b[30]; 
int p= sizeof(a)/sizeof(a[0]); 
for(int i=p-1;i>0;i--){ 
    for(int j=0;j<p;j++){ 

    b[j]=a[i]; 
    } 
    } 

printf("array is %s",b); 
return 0; 
} 
+0

В качестве стартера вы должны использовать 'strlen' для поиска длины строки. Кроме того, вы можете решить этот вопрос без внутреннего цикла. –

+0

Пожалуйста, напишите ошибочный результат, который вы получите. –

+0

'i' должно продолжаться до' i> = 0', если вы не хотите опустить первый символ –

ответ

1
#include<stdio.h> 

int main(){ 

char str[] = "str to rev"; 
char revstr[12]={'\0'}; 
int i, j; 
int length = strlen(str); 
j = 0; 
for(i = length-1; i>=0; i--){ 
    revstr[j] = str[i]; 
    j = j + 1; 
} 

printf("%s", revstr); 

return 0; 
} 
+0

Что такое 'myStrLen'? Вы также должны определить это, иначе этот код не будет связываться. – anishsane

+0

@ H2CO3: входные и выходные массивы здесь разные ... – anishsane

+0

@Anishsane: человек не хочет использовать встроенную функцию, чтобы он мог составить свою собственную версию myStrLen. Я считаю, что – codeomnitrix

0

Использование while цикла ::

void main() 
{ 
char str[100],temp; 
int i,j=0; 

printf("nEnter the string :"); 
gets(str); 

i=0; 
j=strlen(str)-1; 

while(i<j) 
    { 
    temp=str[i]; 
    str[i]=str[j]; 
    str[j]=temp; 
    i++; 
    j--; 
    } 

printf("nReverse string is :%s",str); 
return(0); 
} 

Использование for цикла ::

void StrRev(char *str) 
{ 
int i, len, endpos; 

len = strlen(str); 
endpos = len-1; 

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

1) В своем первом for цикле, вы должны достичь 0 (i>=0)

for(int i=p-1;i>=0;i--){ 

2) a[p-1] содержит нулевое завершение ('\0') вашей строки a[]. И нулевое завершение не должно включаться в процедуру обратного массива. Поэтому в первом цикле вы должны начать с p-2, а не с p-1.

И после окончания реверсирования вы должны добавить '\0' (нуль-терминатор) в конце вашего b массива

b[j]='\0'; // add this 
printf("array is %s",b); 
return 0; 

3) И, как сказано в другие ответы, вы должны использовать только одну петлю а не 2 петли.

int i,j; 
for (i=p-2, j=0; i>=0; i--,j++) { 
    b[j]=a[i]; 
} 
b[j]='\0'; 
printf("array is %s",b);