2014-01-29 2 views
-6

Я пытаюсь выполнить простую программу в C++, и я не могу получить этот результат, что мне делать сейчас. Я пробовал этот код с разными версиями в gcc-компиляторе на другой платформе.Почему моя строка (массив символов) не печатает?

#include <iostream> 
#include <string.h> 
using namespace std; 

int main() 
{ 
    int i,m,j; 
    char a[10],b[10],temp; 
    cout << " give the string " << endl; 
    cin >> a; 
    cout << a; 
    m=strlen(a); 
    j=0; 
    for(i=m;i>0;i--){ 
    b[j]=a[i]; 
    cout << " inloop "<<b; 
    j++; 
} 
cout << b << endl; 
return 0; 

}

+4

Там нет шансов получить ответ на этот вопрос, как он стоит, потому что вы не говорите, что результат вы хотите, и телепатия тяжелая. – Jon

+2

Кажется, что вы пытаетесь изменить строку. Используйте 'std :: string' и он имеет все необходимые функции для строковых операций. – Mahesh

+1

«Я не могу получить этот результат» - мы не судьи. Сообщите нам ожидаемый результат и фактический, а также предоставленный вами ввод. – Angew

ответ

6

Все в C 0-индексированные. a[i] с первой итерацией - a[strlen(a)], которая составляет \0.

если ваш вход bobo, содержимое массива a будет

a[0] = 'b' 
a[1] = 'o' 
a[2] = 'b' 
a[3] = 'o' 
a[4] = '\0' 

ваш цикл начинается с [4] (потому что STRLEN (а) == 4), так что ваша строка будет б :

b[0] = '\0' 
b[1] = 'o' 
b[2] = 'b' 
b[3] = 'o' 
b[4] = 'b' 

Печать приведет к тому, что печать будет напечатана.

1

Чтобы исправить ваш код. Вам нужно перебирать от м-1 до 0. и добавить \ 0 в конце строки

#include <iostream> 
#include <string.h> 
using namespace std; 

int main() 
{ 
    int i,m,j; 
    char a[10],b[10],temp; 
    cout << " give the string " << endl; 
    cin >> a; 
    cout << a; 
    m=strlen(a); 
    j=0; 
    for(i=m-1;i>=0;i--){ // Iteration changed here 
    b[j]=a[i]; 
    cout << " inloop "<<b; 
    j++; 
    } 
    b[j] = '\0'; // Add this line 
    cout << endl << b << endl; 
    return 0; 
} 
+0

Спасибо, что работает, но почему я не могу использовать cout b (извините, что я помещаю этот комментарий с мобильного телефона) – user2253623

+0

@ user2253623 вы можете это сделать. Проблема заключается в инструкции for. Вы копируете '' \ 0'' в 'b [0]'. '' \ 0'' является символом окончания строки. – Daniele

Смежные вопросы