我正在做一个练习,说我必须输入一个短语并将其放入数组中,然后我必须删除所有重复的字符并显示新短语。 我是这样做的,但是我不知道如何从字符串数组中获取char并将其放入另一个字符串数组中。
PS:我只能使用C#和数组的基础知识:(
namespace Exercice3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Entrez une phrase SVP!!");
string phrase = Console.ReadLine();
string[] phraseArray = new string[]{ phrase };
string[] newPhrase = new string[phrase.Length];
for (int i = 0; i <= phrase.Length - 1; i++)
{
for (int j = 1; j <= phrase.Length - 1; j++)
{
if (phraseArray[i] != phraseArray[j])
newPhrase = phraseArray[i]; //Probleme here
}
}
Console.WriteLine(newPhrase);
}
}
}
答案 0 :(得分:0)
这里的主要问题是您正在使用字符串数组。这是不合适的,因为您试图迭代字符串的字符。
您需要像这样构造字符数组:
char[] phraseArray = phrase.ToCharArray();
这应该使您能够迭代字符集,检查重复项并形成新的字符数组。
答案 1 :(得分:0)
类似的事情会做到的。您不必这样做...
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var newColl = new List<char>();
foreach(char c in "aaabbbccc".ToCharArray())
{
if (!newColl.Contains(c))
newColl.Add(c);
}
Console.WriteLine(new string(newColl.ToArray()));
}
}
输出:
abc
仅数组方法
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
const string orig = "aaabbbcccddd";
int origLen = orig.Length;
char[] newArr = new char[origLen]; // get max possible spots in arr
int newCount = 0;
for(int i = 0; i < origLen; i++)
{
bool yes = false;
for(int j = 0; j < newCount + 1; j++)
{
if (newArr[j] == orig[i])
{
yes = true;
break;
}
}
if (!yes)
{
newArr[newCount] = orig[i];
newCount++;
}
}
Console.WriteLine(new string(newArr));
}
}
输出:
abcd
答案 2 :(得分:0)
获得IndexOutOfRangeException
的原因是因为如果您查看两个数组:
string[] phraseArray = new string[]{ phrase };
还有
string[] newPhrase = new string[phrase.Length];
两个数组的长度完全不同,phraseArray
的长度为1,并且newPhrase将设置为短语的长度,因此,如果您插入的世界超过1个字符,则两个数组将不匹配然后:
if (phraseArray[i] != phraseArray[j])
或
newPhrase = phraseArray[i];
将失败,特别是newPhrase = phraseArray[i];
,因为在这里您尝试将newPhrase
的数组替换为字符phrase[i]
。基本上,您的解决方案将无法正常工作。因此,您可以做的是 @Travis 建议的操作,基本上将阵列从String[]
更改为char[]
,然后:
char[] phraseArray = phrase.ToCharArray();
或者您可以使用另一个字符串来过滤短语,而不是使用数组。第一个字符串是您的短语,第二个字符串是您要添加非重复字符的字符串。基本上是这样:
Console.WriteLine("Entrez une phrase SVP!!");
string phrase = Console.ReadLine();
string newPhrase = "";
// loop through each character in phrase
for (int i = 0; i < phrase.Length; i++) {
// We check if the character of phrease is within our newPhrase, if it isn't we add it, otherwise do nothing
if (newPhrase.IndexOf(phrase[i]) == -1)
newPhrase += phrase[i]; // here we add it to newPhrase
}
Console.WriteLine(newPhrase);
别忘了阅读代码中的注释。
修改:
基于给出的评论和建议,我实施了类似的解决方案:
Console.WriteLine("Entrez une phrase SVP!!");
char[] phrase = Console.ReadLine().ToCharArray();
char[] newPhrase = new char[phrase.Length];
int index = 0;
// loop through each character in phrase
for (int i = 0; i < phrase.Length; i++) {
// We check if the character of phrease is within our newPhrase, if it isn't we add it, otherwise do nothing
if (Array.IndexOf(newPhrase, phrase[i]) == -1)
newPhrase[index++] = phrase[i]; // here we add it to newPhrase
}
Console.WriteLine(newPhrase);