Задача: В строке вставить после предпоследнего символа первый и второй символ строки. Если длина строки меньше четырех, то вывести, что это сделать невозможно.
[latex]s1[/latex] | [latex]s2[/latex] | Комментарий |
qwerty | qwertqwy | Тест пройден |
_ qwert y | _ qwert _ y | Тест пройден |
qwe | — | Невозможно выполнить операцию. |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <string> using namespace std; int main() { string s1, s2; getline(cin, s1); if(s1.length()<4){ cout << "Невозможно выполнить операцию." << endl; } else { s2=s1.substr(0, s1.length()-1); s2+=s1[0]; s2+=s1[1]; s2+=s1[s1.length()-1]; } cout << s2 << endl; return 0; } |
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Scanner in = new Scanner(System.in); String s1 = in.nextLine(); String s2 = new String(); if(s1.length()<4){ System.out.println("Невозможно выполнить операцию."); } else { s2=s1.substring(0, s1.length()-1); s2+=s1.charAt(0); s2+=s1.charAt(1); s2+=s1.charAt(s1.length()-1); } System.out.println(s2); } } |
Дана строка [latex]s1[/latex]. Переписываем из неё в строку [latex]s2[/latex] все символы, кроме последнего. Добавляем первый, второй и последний символ строки [latex]s1[/latex] в строку [latex]s2[/latex].

В общем все верно, но посимвольное копирование строки в цикле
и выглядит громоздко и выполняется неоптимально. Посмотрите метод substr класса string.
Исправила.
Замечание про невозможность выполнения операции для строк короче 4 символов, наводит на мысль, что задача понята неверно. Ваш подход работает и для строк из двух символов. Если два первых убрать и вставить потом между последним и предпоследним, то понятно почему должно быть минимум 4 символа.
Но, раз автор задачи ничего про это не сказал, то зачтено.
Неоптимальное решение на Java — несколько раз строка пересоздается (при конкатенации). Не всегда калька с C++ это хорошо.
Впрочем, кто-то Вам уже поставил 10 баллов (может и я), снижать не буду.