看到一个简单的题目:http://www.cnblogs.com/rond/archive/2012/05/17/2505997.html#2781431
//写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。
适合我这种新手,然后用 c# 写了一下。。
这个实现挺简单的,就是用了for循环来实现而已。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 笔试题目 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。 14 15 string str = "I am a student"; 16 //string str = "you are a woman"; 17 int length = 0;//总长度 18 //获取总长度 19 foreach (char c in str) 20 { 21 length++; 22 } 23 Console.WriteLine("Original:" + str); 24 Console.Write("Reverse: "); 25 26 int curPos = length;//当前位置在最后 27 for (int i = length - 1; i >= 0; i--) 28 { 29 if (i==0 || str[i] == ‘ ‘)//遇到空格时输出,和对第一个单词特别处理 30 { 31 for (int j = i; j < curPos; j++) 32 { 33 if (str[j] != ‘ ‘) 34 { 35 Console.Write(str[j]); 36 } 37 } 38 if (i != 0)//第一个单词最后不用输出空格 39 { 40 Console.Write(‘ ‘); 41 } 42 curPos = i;//当前位置为当前空格位置 43 } 44 } 45 Console.ReadKey(); 46 } 47 } 48 }
然后也用栈做了一下,个人觉得用栈更加方便,从头开始检索到最后,遇到单词进栈就可以了。
1 using System; 2 3 namespace 笔试题目 4 { 5 class Program 6 { 7 /// <summary> 8 /// 单词类 9 /// </summary> 10 public class Word 11 { 12 /// <summary> 13 /// 内容 14 /// </summary> 15 public string Data { get; set; } 16 /// <summary> 17 /// 链接下一个 18 /// </summary> 19 public Word next { get; set; } 20 } 21 22 class MyStack 23 { 24 Word head = null;//头节点 25 26 /// <summary> 27 /// 入栈 28 /// </summary> 29 /// <param name="word">单词字符串</param> 30 public void Push(string word) 31 { 32 if (head == null)//当前栈没有数据 33 { 34 head = new Word(); 35 head.Data = word; 36 head.next = null; 37 } 38 else 39 { 40 Word node = new Word();//一个节点 41 node.Data = word; 42 node.next = head; 43 head = node; 44 } 45 } 46 47 /// <summary> 48 /// 出栈 49 /// </summary> 50 /// <returns></returns> 51 public string Pop() 52 { 53 if (head != null) 54 { 55 string data = head.Data; 56 head = head.next; 57 return data; 58 } 59 else 60 { 61 return null; 62 } 63 } 64 65 /// <summary> 66 /// 是否有数据 67 /// </summary> 68 /// <returns></returns> 69 public bool HasData() 70 { 71 return head == null ? false : true; 72 } 73 } 74 75 static void Main(string[] args) 76 { 77 //写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。 78 79 //string str = "I am a student"; 80 string str = "you are a woman"; 81 Console.WriteLine("Original:" + str); 82 Console.Write("Reverse :"); 83 84 MyStack stack = new MyStack(); 85 string word = ""; 86 foreach (char c in str) 87 { 88 if (c != ‘ ‘) 89 { 90 word += c.ToString(); 91 } 92 else//当前字符为空格 93 { 94 if (word != "") 95 { 96 stack.Push(‘ ‘+word); 97 } 98 word = ""; 99 } 100 } 101 102 if (word != "")//最后一个单词 103 { 104 stack.Push(word); 105 } 106 107 while(stack.HasData()) 108 { 109 Console.Write(stack.Pop()); 110 } 111 Console.ReadKey(); 112 } 113 } 114 }