题目要求
将用户输入的单词用下划线连接起来。
输入时用空格或回车来分隔单词或句子,连续输入两个回车则结束输入。
输入格式
He
is
a
doctor
in
the
hospital
或:
He is a doctor
in the hospital
或:
He is a doctor in the hospital
输出格式
He_is_a_doctor_in_the_hospital
编程平台
Visual Studio 2017 控制台
代码实现
思路:
(1)输入:使用死循环来读取用户输入的每一行内容,由于连续输入两个回车时,第二个回车的内容为空,故读取到的输入为空时即可退出循环。使用一个可变字符串words来存储用户的输入,追加words时每一行的内容用一个空格隔开。
(2)处理:保证words中仅是单词之间有空格,且将一个个单词分离到字符串数组中。
(3)输出:将字符串数组用下划线连接成字符串,输出字符串。
// StringBuilder声明的字符串可以自由扩展大小,string则固定大小。
StringBuilder words = new StringBuilder();
while(true)
{
string input = Console.ReadLine(); // 读取一行内容
if(input != "") // 或:!input.Equals("")
{
words.Append(input.Trim()); // Trim函数去除行首行末可能存在的空格
words.Append(" "); // 用空格来于区分行之间的内容
}
else // 退出死循环
{
break;
}
}
if (words.Length > 1) // 如果有输入单词
{
// 输入处理后words最后一个字符一定为空格,故要删去。
words.Remove(words.Length - 1, 1);
// 使用正则表达式将任何空白字符替换成一个空格,重点是为了处理制表符等特殊符号产生的空格。
// 由于Regex.Replace的返回结果为string类型,故声明string变量来接收,也方便下一步使用string的Split函数。
// 注意使用正则表达式要引入命名空间System.Text.RegularExpressions。
string input = Regex.Replace(words.ToString(), @"\s", " ");
// 以空格分割字符串成字符串数组,并设置StringSplitOptions.RemoveEmptyEntries来去除可能出现连续多个空格而产生的空数组。
// 由于Split函数的返回结果为string[]类型,故声明string[]变量来接收。
string[] output = input.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
// 使用string的Join函数以“_”来将字符数组连接成字符串后输出。
Console.WriteLine(string.Join("_", output));
}
else
{
Console.Write("您什么也没有输入!");
}
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!