是否可以顛倒數組而不影響特殊字符?通過特殊字符,我指的是從'a'到'z'和'A'到'Z'的任何字符。我缺乏構建算法的想法,但我仍然沒有想到。顛倒數組而不影響特殊字符
回答
一個簡單的解決辦法是簡單的解決方案:
1)創建臨時字符數組 - >例如:myArr,該[]。
2)將給定數組中的字母字符複製到myArr []。
3)使用標準字符串反轉算法反轉myArr []。
4)現在遍歷一個循環中的輸入字符串和myArr。無論字母字符是輸入字符串,都將其替換爲myArr []的當前字符。
上述解決方案的小問題,它需要額外的空間,並且它會對輸入字符串進行兩次遍歷。 你可以倒過來一個遍歷,沒有額外的空間。以下是算法。
1)設輸入字符串 'str的[]' 和字符串的長度是 '一'
2)L = 0,R = A-1
3)當l爲小於r中,執行以下 一個)如果str [1]是不是字母字符,執行升++
b)否則如果str [R]是不是字母字符,不要R--
C)否則交換STR [l]和str [r]
這是一個解決方案,可以一次性完成「就地」。
bool isspecial(char c)
{
if ((c >= 'a') && (c <= 'z')) return false;
if ((c >= 'A') && (c <= 'Z')) return false;
return true;
}
void rev(char* array, int N)
{
int i = 0; // i points to the first index of the array
int j = N - 1; // j points to the last index of the array
while (i < j)
{
if (isspecial(array[i]))
{
i++;
}
else if (isspecial(array[j]))
{
j--;
}
else
{
char tmp = array[i];
array[i] = array[j];
array[j] = tmp;
i++;
j--;
}
}
}
'else'的前三行可以用'std :: swap(array [i],array [j])替換;'除了縮短兩行並且性能完全一樣,真正的勝利就是它會讓你更加清楚地看到你正在交換這兩個元素。 –
好點。但我寧願向學習者展示一個學習者(*新編程*)解決方案,因爲它映射到算法,而不一定是使用語言基元的最佳解決方案。但我聽到你的聲音。 – selbie
如果你想在特殊字符的位置保持不變,該字符串的其餘部分被逆轉那麼這應該工作 -
#include <iostream>
using namespace std;
void swap(char& a, char& b)
{
char temp = a;
a = b;
b = temp;
}
int main()
{
string s = "Hell$o World";
for(int i = 0, j = s.length() -1;i < s.length()/2; i++, j--) {
while((s[i] <= 'a' && s[i] >= 'Z') || s[i] >= 'z' || s[i] <= 'A') {
i++;
}
while((s[j] <= 'a' && s[j] >= 'Z') || s[j] >= 'z' || s[j] <= 'A') {
j--;
}
swap(s[i], s[j]);
}
cout << s << endl; //dlro$W olleH
return 0;
}
Console.WriteLine("enter any string");
string str = Console.ReadLine();
string[] revstr = new string[str.Length];
for (int i = 0; i < str.Length; i++)
{
int ch = Convert.ToInt16(str.ToLower()[i]);
if ((ch < 97 || ch > 122))
{
revstr[i] = str[i].ToString();
}
}
for (int k = str.Length - 1; k >= 0; k--)
{
int ch = Convert.ToInt16(str.ToLower()[k]);
if (!(ch < 97 || ch > 122))
{
for (int j = 0; j < str.Length; j++)
{
if (revstr[j] == null)
{
revstr[j] = str[k].ToString();
break;
}
}
}
}
for (int s = 0; s < revstr.Length; s++)
{
Console.Write(revstr[s]);
}
這個答案似乎是... C#?儘管這個問題被標記爲C++。 –
- 1. 倒車字符串,而不會影響任何特殊字符
- 2. 顛倒簡單的字符串數組
- 3. 顛倒java中的字符串數組
- 4. 顛倒字符串
- 5. 通過顛倒@XmlElement重命名的影響解組json?
- 6. json_encode數組特殊字符
- 7. 顛倒字符串c#
- 8. 有效顛倒字符數組中字(不是字符)的順序
- 9. 顛倒python字符串中的字符
- 10. 顛倒字符串的字符
- 11. jQuery .prepend顛倒了數組?
- 12. 顛倒內容數組
- 13. SPOJ添加顛倒數字
- 14. 如何匹配Unicode特殊字符而不匹配特殊字符
- 15. 使用數組和指針都顛倒字符串
- 16. 用Swift顛倒數組中的字符串
- 17. 顛倒使用xcode中的數組的字符串
- 18. 繪製字體紋理(字符顛倒)
- 19. 顛倒字符串中的某些字
- 20. 顛倒字符串中字的排序
- 21. 字符串中字的顛倒順序
- 22. 顯示不同的字符而不是特殊字符
- 23. 顛倒的文字
- 24. 向數組中添加特殊字符
- 25. PHP關聯數組:特殊字符?
- 26. PHP:特殊字符作爲數組鍵
- 27. 數字和特殊字符不替換
- 28. 從Retrofit2響應刪除特殊字符
- 29. Ajax響應包括特殊字符
- 30. JSON響應中的特殊字符(ë)
樣品的輸入和輸出? –
*「不影響特殊字符」*是什麼意思?那些角色不會被顛倒過來? – selbie