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

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

给定一个长度不超过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中会有类似的实现机制吗?

天蓬老师
天蓬老师

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

membalas semua(3)
小葫芦

string dalam C++ sebenarnya menggunakan char untuk menyimpan data dan membebankan operator [], jadi data boleh dibaca seperti tatasusunan.

typedef basic_string<char>    string;  

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

Dalam C atau C++, nilai bukan sifar dianggap benar, dan || ialah operasi litar pintas, jadi dalam while(a || b || c), jika a不为0或者为true, ia akan terus memasuki badan gelung tanpa menilai b dan c, jika a为0或者为false, teruskan menilai b, dan seterusnya.

Operator yang lebih muatan tidak dibenarkan dalam

Java, dan boolean或Boolean khas digunakan untuk mewakili true dan false, jadi tiada cara untuk melaksanakan mekanisme yang serupa. Tetapi pengendali || juga merupakan operasi litar pintas.

Ty80
  1. C++ menyokong lebihan beban pengendali

  2. C++ boleh menggunakan int sebagai syaratIa adalah palsu hanya apabila nilainya ialah 0, dan ia adalah benar jika ia bukan 0

Nota: Java tidak menyokong lebihan muatan operator, jadi jenis tersuai tidak boleh menggunakan [] untuk mendapatkan nilai (hanya tatasusunan tersedia [] Kedua, pertimbangan bersyarat dalam Java mestilah jenis boolean, yang tidak boleh digunakan intJenis digunakan sebagai syarat penghakiman.

黄舟

Saya bersetuju dengan perkara di atas Salah satu matlamat C++ adalah untuk mengekalkan keserasian dengan C, bukan sahaja dari segi sintaks, tetapi juga dari segi tabiat penggunaan.
Sebagai jenis string yang direka bentuk baru, matlamatnya adalah untuk mengekalkan prestasi tinggi sambil mengekalkan keserasian dengan tabiat penggunaan C. Itulah sebabnya terdapat terlalu banyak beban operator [jarang berlaku dalam bahasa lain]. Bagi soalan kedua, ia adalah masalah C.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!