Как поместить строку, введенную в массив символов в C ++?

Теперь я сталкиваюсь с такой проблемой: сравнивайте две строки без использования «strcmp» в библиотечной функции.

Я правильно определил функцию «mystrcmp», но я также должен поместить введенную строку в массив символов. Как я могу это понять?

Вот мои неправильные коды:

char a1[100],a2[100];
int j=0;
do
{
cin>>a1[j];
j=j+1;
}while(getchar()!=10);
int k=0;
do
{
cin>>a2[k];
k=k+1;
}while(getchar()!=10);

cout<<j<<"  "<<k<<"\n";

Я хочу видеть, правильны ли петли через j и k. К сожалению, результаты неверны.
Например, когда я ввожу «abcdefg» и «gfedcba», я получаю результат «j = 4, k = 4».

Что не так с моими кодами? Как я могу это исправить?

Я с нетерпением жду ваших ответов. Спасибо.

1

Решение

Почему вы используете значение 10 в своем коде? Не используйте целочисленные литералы вместо символьных констант, потому что, когда вы попытаетесь запустить этот код на компьютере, который использует набор символов EBCDIC, вы заметите, что ‘\ n’ имеет значение 37, а не 10. Используйте ‘\ n вместо 10

Не смешивайте код getchar и cin. Это довольно плохая идея, потому что они оба потребляют по одному персонажу каждый. Другими словами, getchar () потребляет один байт, а cin потребляет один байт, поэтому вы потребляете два байта на цикл и сохраняете только один из этих байтов. Если вы собираетесь использовать getchar, я думаю, вы имеете в виду что-то вроде этого:

for (int c = getchar(); c >= 0 && c != '\n'; c = getchar()) {
a1[j++] = c;
}
a1[j] = '\0';

То же самое, используя Cin C ++:

for (int c = cin.get(); cin.good() && c != '\n'; c = cin.get()) {
a1[j++] = c;
}
a1[j] = '\0';
1

Другие решения

Это опасный код. Вы можете написать из a1 & а2 оценки. Используйте функции, сделанные для этого, например cin.getline

http://www.cplusplus.com/reference/istream/istream/getline/

0