У меня есть строка, содержащая X слов (между каждым словом есть пробел). Я должен перемещать слова круговыми движениями влево в соответствии с числом, которое вставляет пользователь. Например:
"hi my name is aviv and
"
пользователь ввел 2
. "name is aviv and hi my
" Я ищу законность, которая повторяется, но я не могу найти.
Спасибо за руководство. Самое главное, я не могу использовать встроенные библиотеки
обновление :
Я вижу, есть примеры с библиотеками, я не могу использовать любую библиотеку.
Итак, что я сделал до сих пор.
Я написал функцию, которая получает строку и число от пользователя, чтобы двигаться влево.
Перед отправкой строки в функцию я пытаюсь вычислить количество символов, которое нужно переместить.
Мой вывод - "name is avivhi my
"
Что касается функции:
Когда он получает строку без пробелов, он прекрасно работает.
Это мой код:
int main()
{
char str[] = "hi my name is aviv";
char str2[] = "hi my name is aviv";
int CountSpace = 0, CountWord = 0;
int Size = 18, flag = 0;
int MoveLeft, Index = 0;
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] == ' ')
{
CountSpace++;
}
}
CountWord = CountSpace + 1;//Understand how many words there are in a string.
cin >> MoveLeft;
if (MoveLeft >= CountWord)//
{
MoveLeft = (MoveLeft - ((MoveLeft / CountWord) * CountWord));//the size of movment;//To reduce the amount of moves if there is such a possibility
}
for (int i = Size - 1; i >= 0; i--)
{
if (str[i] == ' ')
{
flag++;
}
if (flag == MoveLeft)
{
Index = Size - 1 - (i + 1);//That's the amount of characters I have to move
break;
}
}
MoveLeft = Index;
//This code belongs to the function that accepts a string and the amount to move the characters
for (int i = 0; i < Size; i++)
{
if (i + MoveLeft < Size)
{
str[i] = str2[i + MoveLeft];
}
else
{
str[i] = str2[(i + MoveLeft) - Size];
}
}
cout << "Move Left: " << MoveLeft << endl << str << endl << str2 << endl;
return 0;
}