3

文字列に一意の文字が含まれているかどうかを確認する方法は知っていますが、大文字と小文字が異なっていてもNOTUNIQUEを表示したい

例-私のアルゴリズム

string = "dhAra" => UNIQUE

私がより良いと思うのは、「a」が2回あるため、NOTUNIQUEが表示されることです。

#include<iostream>

int main()
{
string str = "dhAra";
bool arr[128] = {0};

for (unsigned int i = 0; i < str.length() ; i++)
{
 int val = str[i];  //i think something needs to change here 
 cout << val << endl; 

 if(arr[val])
 { 
  cout << " not unique" ; 
  return 0; 
 }
 else
 { arr[val] = 1;} 
}
cout << "unique" ; 
return 0 ; 
}
4

5 に答える 5

5

toupperまたはすべての文字を使用tolowerして、大文字と小文字のみが異なる重複を確実にキャッチできます。

int val = toupper(str[i]); // tolower would be fine as well

true補足として、boolC++でに割り当てる標準的な方法は次のとおりです。

arr[val] = true; // rather than arr[val] = 1

どちらの方法でも問題なく動作しますが。

于 2013-03-25T19:58:35.577 に答える
0

これが私がやりたかったことの正しい方法の1つです。

// find if the string contains unique characters 
// uses extra space 

#include<iostream>

int main()
{
string str = "dhAr guptqwe fsklm";
bool arr[128] = {false};

for (unsigned int i = 0; i < str.length() ; i++)
{
 int val = toupper(str[i]);

 if(val == 32)
 continue; 

 if(arr[val])
 { 
  cout << " not unique" ; 
  return 0; 
 }
 else
 { arr[val] = true;} 
}
cout << "unique" ; 
return 0 ; 
}

ありがとう

于 2013-03-25T20:18:09.663 に答える
0

/ * *このテンプレートを変更するには、[ツール]、[ツール]の順に選択します。テンプレート*そしてエディターでテンプレートを開きます。*/パッケージgeeksforgeeks;

/ ** * * /java.utilをインポートします。;

パブリッククラスunique_char{

/**
 * @param args the command line arguments
 */
public static void quicksort(char array[], int p, int r)
{
    System.out.println("hello");
    if(r - p < 1)
          return;
    int pivot = p;
    int i = p + 1;
    int j = r;

    while(i < j)
    {
        while(array[i] > array[p] && i < r)
            i++;
        while(array[j] > array[p] && j > p)
            j--;

        if(i < j)
            swap(array,i,j);
    }
    swap(array,pivot,j);

    quicksort(array,p,j-1);
    quicksort(array,j+1,r);

}
public static void main(String[] args) 
{
    Scanner sc = new Scanner(System.in);
    char line[] = sc.nextLine().toCharArray();
    quicksort(line,0,line.length-1);

    //System.out.print(line);

    for(int i=0; i<line.length-1; i++)
    {
          if(line[i] == line[i+1])
               System.out.println("string dont have all char unique");
               break;
    }

}

private static void swap(char[] array, int pivot, int j)
{
    char t = array[pivot];
    array[pivot] = array[j];
    array[j] = t;
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}

于 2014-02-11T12:19:25.460 に答える
0

Dharagによって投稿された最新の回答は、最終的な回答を与える小さな変更を除いて、ほとんど機能します。

#include<iostream>
#include<conio.h>
using namespace std;

int main(){

int counter = 0;
string str = "dhAr guptqwe fsklm";
bool arr[128] = { false };

for (unsigned int i = 0; i < str.length(); i++)
{
    int val = toupper(str[i]);

    if (val == 32)
        continue;

    if (arr[val])
    {
        cout << "not unique\n";
        counter++;
        break;
        //return 0;
    }
    else
    {
        arr[val] = true;
    }
}

if (counter < 1) {
    cout << "unique\n";
}
return 0;
}

カウンター変数を使用し、一致する文字が見つかったときにインクリメントしました。カウンタの値をチェックして、文字列全体が一意であるかどうかを確認します。また、文字列で一致が見つかったら、残りのプロセスを終了して効率を上げることができます。

于 2016-03-15T03:13:21.180 に答える
0

この問題に対する私の解決策は次のとおりです。

#include<iostream>
#include<string>
using namespace std;

//Method signature to determing if the string are unique
bool hasUniqueCharacters(string str);

int main(void){
    string str;
    getline(cin, str);
    if(hasUniqueCharacters(str)){
        cout<< " The Input string has all unique character" ;
    }
    else{
        cout<< " The input string does not have unique characters";
    }
    return 0;
}

/// <summary>
///     Implements the method hasUniqueCharacters to check if the input string has unique characters
/// </summary>
/// <Assumption>
///     This method assumes that all the characters in the input string are ASCII characters and the method uses a boolean array and makes the index of the ASCII equivalent field true. and traverses the whole string to veirfy if there are no duplicates.
/// </Assumption>
/// <param name="str">
///    This is the input string which needs to be checked.
/// </param>
/// <return datatype = boolean>
///     This method would return true if all the characters are unique in the input string.
/// </return datatype>

bool hasUniqueCharacters(string str){
    int strLength = str.size();
    bool characters[256];
    //Initializing all the index values in characters array to false.
    for(int i=0;i<256;i++){
        characters[i] = false;
    }
    //We are verifying if the character is already present in the array else making it true and perform this operation untill the string is complete.
    for(int i=0;i<strLength-1;i++){
        if(characters[int(str[i])])
            return false;
        else 
            characters[int(str[i])] = true;
    }
    return true;
}
于 2018-01-11T18:52:13.350 に答える