У меня вопрос о домашнем задании. Я так близок к полной программе. У меня проблемы с чем-то. Это вопрос:Перемещающийся элемент массива один за другим
написать программу C, которая генерирует и выводит массив символов размера 10, состоящего из случайных английских букв нижнего регистра. Затем программа запрашивает у пользователя, сколько раз массив будет сдвинут вправо и отобразит смещенный справа массив на каждом шаге правого смещения. Образец вывод выполнения программы приведен ниже. (Подсказка: используйте коды ASCII английских строчных букв , которые составляют 97, 98, ... 122 для a, b, ..., z, соответственно, для генерации массива символов).
Это мой код:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
void print_string (char *string){
int i;
for (i=0 ; i < 10 ; i ++){
printf("%c ", string[i]);
if (i == 9)
printf("\n");
}
}
void random_string(char *string, unsigned length)
{
/* Seed number for rand() */
srand((unsigned int) time(0) + getpid());
/* ASCII characters 97 to 122 */
int i;
for (i = 0; i < length; ++i)
{
string[i] = (rand() % 26)+ 97;
}
string[i] = '\0';
}
void reverse_string(char* str, int left, int right) {
char* p1 = str + left;
char* p2 = str + right;
while (p1 < p2) {
char temp = *p1;
*p1 = *p2;
*p2 = temp;
p1++;
p2--;
}
}
void rotate(char* str, int k, int n) {
reverse_string(str, 0, n-1);
reverse_string(str, 0, k-1);
reverse_string(str, k, n-1);
}
int main(void)
{
char s[11];
int i,shiftNum;
random_string(s, 11);
printf("Randomly constructed array is :\n");
print_string(s);
printf("Enter how many times array will be shifted: ");
scanf("%d",&shiftNum);
rotate(s,shiftNum,11);
print_string(s);
}
Что случилось с этим кодом? Когда я выполняю его с 1, я не мог правильно получить первое обратное, и я хочу отобразить все шаги переключения.
У вас есть неопределенное поведение, поскольку вы устанавливаете '\ 0' в' s [11] ', что является недопустимым местоположением.Кроме того, 'print_string()' не печатает первый символ 's' –
да, вы правы, я пытался что-то забыть, изменив его, прежде чем спрашивать его здесь, спасибо u – tackleberry
Nit pick:« Английские строчные буквы »- это те, которые используются в английской системе письма, которая включает в себя акценты, лигатуры и т. д. Вы могли бы называть «a» .. «z» строчными буквами с английского алфавита или, в других терминах CS, [Basic Latin] (http: //www.unicode.org/charts/nameslist/index.html) небольшие буквы. –