天梯赛的一道题,题目如下:
给定一个长度不超过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中会有类似的实现机制吗?
string
dalam C++ sebenarnya menggunakanchar
untuk menyimpan data dan membebankan operator[]
, jadi data boleh dibaca seperti tatasusunan.Dalam C atau C++, nilai bukan sifar dianggap benar, dan
Operator yang lebih muatan tidak dibenarkan dalam||
ialah operasi litar pintas, jadi dalamwhile(a || b || c)
, jikaa不为0或者为true
, ia akan terus memasuki badan gelung tanpa menilaib
danc
, jikaa为0或者为false
, teruskan menilaib
, dan seterusnya.Java
, danboolean或Boolean
khas digunakan untuk mewakilitrue
danfalse
, jadi tiada cara untuk melaksanakan mekanisme yang serupa. Tetapi pengendali||
juga merupakan operasi litar pintas.C++ menyokong lebihan beban pengendali
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 jenisboolean
, yang tidak boleh digunakanint
Jenis 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.