# Program to insert dashes between two adjacent odd digits in given Number

Last Updated : 27 Jan, 2023

Given a large number in form of string N, the task is to insert a dash between two adjacent odd digits in the given number in form of strings.

Examples:

Input: N = 1745389
Output: 1-745-389
Explanation:
In string str, str[0] and str[1] both are the odd numbers in consecutive, so insert a dash between them.
Input: N = 34657323128437
Output: 3465-7-323-12843-7

Bitwise Approach:

1. Traverse the whole string of numbers character by character.
2. Compare every consecutive character using logical Bitwise OR and AND operators.
3. If two consecutive characters of the string are odd, insert a dash (-) in them and check for the next two consecutive characters.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ` `#include ` `using` `namespace` `std;`   `// Function to check if char ch is` `// odd or not` `bool` `checkOdd(``char` `ch)` `{` `    ``return` `((ch - ``'0'``) & 1);` `}`   `// Function to insert dash - between` `// any 2 consecutive digit in string str` `string Insert_dash(string num_str)` `{`   `    ``string result_str = num_str;`   `    ``// Traverse the string character` `    ``// by character` `    ``for` `(``int` `x = 0;` `         ``x < num_str.length() - 1; x++) {`   `        ``// Compare every consecutive` `        ``// character with the odd value` `        ``if` `(checkOdd(num_str[x])` `            ``&& checkOdd(num_str[x + 1])) {`   `            ``result_str.insert(x + 1, ``"-"``);` `            ``num_str = result_str;` `            ``x++;` `        ``}` `    ``}`   `    ``// Print the resultant string` `    ``return` `result_str;` `}`   `// Driver Code` `int` `main()` `{`   `    ``// Given number in form of string` `    ``string str = ``"1745389"``;`   `    ``// Function Call` `    ``cout << Insert_dash(str);`   `    ``return` `0;` `}`

## Java

 `// Java program to implement` `// the above approach` `class` `GFG{`   `// Function to check if char ch is` `// odd or not` `static` `boolean` `checkOdd(``char` `ch) ` `{` `    ``return` `((ch - ``'0'``) & ``1``) != ``0` `?` `            ``true` `: ``false``;` `}`   `// Function to insert dash - between` `// any 2 consecutive digit in string str` `static` `String Insert_dash(String num_str)` `{` `    ``StringBuilder result_str = ``new` `StringBuilder(num_str);`   `    ``// Traverse the string character` `    ``// by character` `    ``for``(``int` `x = ``0``; x < num_str.length() - ``1``; x++) ` `    ``{`   `        ``// Compare every consecutive` `        ``// character with the odd value` `        ``if` `(checkOdd(num_str.charAt(x)) &&` `            ``checkOdd(num_str.charAt(x + ``1``))) ` `        ``{` `            ``result_str.insert(x + ``1``, ``"-"``);` `            ``num_str = result_str.toString();` `            ``x++;` `        ``}` `    ``}`   `    ``// Print the resultant string` `    ``return` `result_str.toString();` `}`   `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `    `  `    ``// Given number in form of string` `    ``String str = ``"1745389"``;`   `    ``// Function call` `    ``System.out.println(Insert_dash(str));` `}` `}`   `// This code is contributed by rutvik_56`

## Python3

 `# Python3 program for the above approach `   `# Function to check if char ch is ` `# odd or not ` `def` `checkOdd(ch):`   `    ``return` `((``ord``(ch) ``-` `48``) & ``1``) `   `# Function to insert dash - between ` `# any 2 consecutive digit in string str ` `def` `Insert_dash(num_str):`   `    ``result_str ``=` `num_str`   `    ``# Traverse the string character` `    ``# by character` `    ``x ``=` `0` `    ``while``(x < ``len``(num_str) ``-` `1``):`   `        ``# Compare every consecutive` `        ``# character with the odd value` `        ``if` `(checkOdd(num_str[x]) ``and` `            ``checkOdd(num_str[x ``+` `1``])):`   `            ``result_str ``=` `(result_str[:x ``+` `1``] ``+` `'-'` `+` `                          ``result_str[x ``+` `1``:])` `            ``num_str ``=` `result_str` `            ``x ``+``=` `1` `        ``x ``+``=` `1`   `    ``# Print the resultant string` `    ``return` `result_str`   `# Driver Code`   `# Given number in form of string ` `str` `=` `"1745389"`   `# Function call ` `print``(Insert_dash(``str``))`   `# This code is contributed by vishu2908`

## C#

 `// C# program to implement` `// the above approach` `using` `System;` `using` `System.Text;` `class` `GFG{`   `// Function to check if char ch is` `// odd or not` `static` `bool` `checkOdd(``char` `ch) ` `{` `    ``return` `((ch - ``'0'``) & 1) != 0 ?` `            ``true` `: ``false``;` `}`   `// Function to insert dash - between` `// any 2 consecutive digit in string str` `static` `String Insert_dash(String num_str)` `{` `    ``StringBuilder result_str = ``new` `StringBuilder(num_str);`   `    ``// Traverse the string character` `    ``// by character` `    ``for``(``int` `x = 0; x < num_str.Length - 1; x++) ` `    ``{`   `        ``// Compare every consecutive` `        ``// character with the odd value` `        ``if` `(checkOdd(num_str[x]) &&` `            ``checkOdd(num_str[x + 1])) ` `        ``{` `            ``result_str.Insert(x + 1, ``"-"``);` `            ``num_str = result_str.ToString();` `            ``x++;` `        ``}` `    ``}`   `    ``// Print the resultant string` `    ``return` `result_str.ToString();` `}`   `// Driver Code` `public` `static` `void` `Main(String[] args)` `{` `    `  `    ``// Given number in form of string` `    ``String str = ``"1745389"``;`   `    ``// Function call` `    ``Console.WriteLine(Insert_dash(str));` `}` `}`   `// This code is contributed by Rajput-Ji`

## Javascript

 `// Javascript program for the above approach`   `// Function to check if char ch is` `// odd or not` `function` `checkOdd(ch)` `{` `    ``return` `(parseInt(ch) & 1);` `}`   `// Function to insert dash - between` `// any 2 consecutive digit in string str` `function` `Insert_dash(num_str)` `{`   `    ``let result_str = ``""``;`   `    ``// Traverse the string character` `    ``// by character` `    ``for` `(let x = 0;` `         ``x < num_str.length - 1; x++) {`   `        ``// Compare every consecutive` `        ``// character with the odd value` `        ``if` `(checkOdd(num_str[x])` `            ``&& checkOdd(num_str[x + 1])) {`   `            ``result_str+=(num_str[x]+ ``"-"``);` `        ``}` `        ``else``{` `            ``result_str+=num_str[x];` `        ``}` `        `  `    ``}` `    `  `    ``result_str+=num_str[num_str.length-1];` `    ``// Print the resultant string` `    ``return` `result_str;` `}`   `// Driver Code` `    ``// Given number in form of string` `    ``let str = ``"1745389"``;`   `    ``// Function Call` `    ``document.write(Insert_dash(str));`

Output:

`1-745-389`

Time Complexity: O(N)
Auxiliary Space: O(1)

Regular Expression Approach:

The given problem can be solved using Regular Expression. The RE for this problem will be:

(?<=[13579])(?=[13579])
The given RE matches between odd numbers. We can replace the matched part of zero width with a dash, i.e.
str = str.replaceAll(“(?<=[13579])(?=[13579])”, “-“);

Below is the implementation of the above approach:

## C++

 `// C++ Program to implement` `// the above approach` `#include ` `#include ` `using` `namespace` `std;`     `// Function to insert dash - between` `// any 2 consecutive odd digit` `string Insert_dash(string str)` `{` `  `  `  ``// Get the regex to be checked` `  ``const` `regex pattern(``"([13579])([13579])"``);`   `  ``// Replaces the matched value ` `  ``// (here dash) with given string` `  ``return` `regex_replace(str, pattern, ``"\$1-\$2"``);;` `}`   `// Driver Code` `int` `main()` `{` `  ``string str = ``"1745389"``;` `  ``cout << Insert_dash(str);` `  ``return` `0;` `}`   `// This code is contributed by yuvraj_chandra`

## Java

 `// Java program for the above approach`   `import` `java.util.regex.*;`   `public` `class` `GFG {`   `    ``// Function to insert dash - between` `    ``// any 2 consecutive odd digit` `    ``public` `static` `String Insert_dash(String str)` `    ``{`   `        ``// Get the regex to be checked` `        ``String regex = ``"(?<=[13579])(?=[13579])"``;`   `        ``// Create a pattern from regex` `        ``Pattern pattern = Pattern.compile(regex);`   `        ``// Create a matcher for the input String` `        ``Matcher matcher` `            ``= pattern.matcher(str);`   `        ``// Get the String to be replaced,` `        ``// i.e. here dash` `        ``String stringToBeReplaced = ``"-"``;` `        ``StringBuilder builder` `            ``= ``new` `StringBuilder();`   `        ``// Replace every matched pattern` `        ``// with the target String` `        ``// using replaceAll() method` `        ``return` `(matcher` `                    ``.replaceAll(stringToBeReplaced));` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args)` `    ``{`   `        ``// Given number in form of string` `        ``String str = ``"1745389"``;`   `        ``// Function Call` `        ``System.out.println(Insert_dash(str));` `    ``}` `}`

## Python

 `# Python program for the above approach` `import` `re`   `# Function to insert dash - between` `# any 2 consecutive odd digit` `def` `Insert_dash(``str``):`   `    ``# Get the regex to be checked` `    ``regex ``=` `"(?<=[13579])(?=[13579])"`   `    ``return` `re.sub(regex,``'\1-\2'``, ``str``)`   `# Driver Code`   `# Given number in form of string` `str` `=` `"1745389"`   `# Function Call` `print``(Insert_dash(``str``))`   `# This code is contributed by yuvraj_chandra`

## C#

 `// C# Program to implement` `// the above approach` `using` `System;` `using` `System.Text.RegularExpressions;` `public` `class` `GFG {`   `  ``// Function to insert dash - between` `  ``// any 2 consecutive odd digit` `  ``static` `string` `Insert_dash(``string` `str)` `  ``{`   `    ``// Get the regex to be checked` `    ``string` `pattern=``"([13579])([13579])"``;`   `    ``// Replaces the matched value` `    ``// (here dash) with given string` `    ``return` `Regex.Replace(str, pattern, ``"\$1-\$2"``);;` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `Main()` `  ``{` `    ``string` `str = ``"1745389"``;` `    ``Console.WriteLine(Insert_dash(str));` `  ``}` `}`   `// This code is contributed by Aman Kumar.`

## Javascript

 `// Javascript Program to implement` `// the above approach`   `// Function to insert dash - between` `// any 2 consecutive odd digit` `function` `Insert_dash(str)` `{`   `// Get the regex to be checked` `let regex = ``new` `RegExp(``"([13579])([13579])"``,``'g'``);`   `// Replaces the matched value` `// (here dash) with given string` `return` `str.replace(regex, ``'\$1-\$2'``);` `}`   `// Driver Code`   `let str = ``"1745389"``;` `console.log(Insert_dash(str));`   `// This code is contributed by Pushpesh Raj.`

Output:

`1-745-389`

Time Complexity: O(N)
Auxiliary Space: O(1)