java - c或c++里面字符数组,字符串之间的关系?
天蓬老师
天蓬老师 2017-04-18 10:22:19
0
3
409

天梯赛的一道题,题目如下:

给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按“GPLTGPLT....”这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

输入格式:

输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。

输出格式:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL

在csdn上面找到的别人用c++的做法,代码如下:

#include <iostream>  
#include <string>  
  
using namespace std;  
  
int main() {  
    string str;  
    int G, P, L, T;  
    G = P = L = T = 0;  
  
    cin >> str;  
    for( int i = 0; i < str.size(); i++ ) {  
        switch( str[i] ) {  
            case 'g':  
            case 'G': G++; break;  
            case 'p':  
            case 'P': P++; break;  
            case 'l':  
            case 'L': L++; break;  
            case 't':  
            case 'T': T++; break;  
        }  
    }  
  
    while( G || P || L || T ) {  
        if( G ) { cout << "G"; G--; }  
        if( P ) { cout << "P"; P--; }  
        if( L ) { cout << "L"; L--; }  
        if( T ) { cout << "T"; T--; }  
    }  
    return 0;  
}  

我发现好像大部分有关字符串的问题都可以用字符数组来接收,比如:

    char a[10005];
    char b[10005];
    gets(a);
    gets(b);
    

这小段代码里面,定义了字符数组,但是却用输入整个字符串的方式来读入的(这小段代码是别的程序里面的)
上面那个完整的代码,不明白的地方又两处:
1.定义的字符串str,却可以当做字符数组来用
2.while循环里里为什么可以直接判断?

请问这里面的实现是否和内存存储方式有关,java中会有类似的实现机制吗?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(3)
小葫芦

string en C++ utilise en fait char pour stocker des données et surcharge l'opérateur [], afin que les données puissent être lues comme un tableau.

typedef basic_string<char>    string;  

class basic_string
{
    operator[](size_type __pos)
    {
        ...
    }
}

En C ou C++, les valeurs non nulles sont considérées comme vraies, et || est une opération de court-circuit, donc en while(a || b || c), si a不为0或者为true, elle entrera directement dans le corps de la boucle sans juger b et c, si a为0或者为false, continuez à juger b, et ainsi de suite.

Les opérateurs surchargés ne sont pas autorisés dans

Java, et un boolean或Boolean spécial est utilisé pour représenter true et false, il n'y a donc aucun moyen d'implémenter un mécanisme similaire. Mais l'opérateur || est aussi une opération de court-circuit.

Ty80
  1. C++ prend en charge la surcharge des opérateurs

  2. C++ peut utiliser int comme conditionIl est faux uniquement lorsque la valeur est 0, et il est vrai si ce n'est pas 0

Remarque : Java ne prend pas en charge la surcharge d'opérateurs, donc les types personnalisés ne peuvent pas utiliser [] pour obtenir des valeurs (seuls les tableaux sont disponibles [] Deuxièmement, le jugement conditionnel en Java doit être des types boolean, ce qui ne peut pas être le cas). être utilisé intLe type est utilisé comme condition de jugement.

黄舟

Je suis d'accord avec le point ci-dessus. L'un des objectifs du C++ est de maintenir la compatibilité avec le C, non seulement en termes de syntaxe, mais aussi en termes d'habitudes d'utilisation.
En tant que type string nouvellement conçu, son objectif est de maintenir des performances élevées tout en maintenant la compatibilité avec les habitudes d'utilisation C. C'est pourquoi il y a tant de surcharges d'opérateurs [rares dans d'autres langues]. Quant à la deuxième question, c'est un problème C.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!