我希望有一个函数将返回true,当且仅当char * s可以通过简单地跨越某些字母从char * t获得时,例如g("ERT", "EAARYT")=true
和g("ERT","ABCT")=false
。
我对此代码的想法如下:
bool g(char* s, char* t) {
for (int i=0; s[i]!=0;i++) {
for (int j=i; t[j]!=0; j++) {
if (s[i]==t[j]) {
return true;
}
}
}
return false;
}
显然它不起作用,因为它只检查第一个字母是否存在然后立即返回true。 我该怎么改变呢?
我更喜欢使用嵌套循环/如果构造它应该比那更可行。
答案 0 :(得分:3)
返回true,当且仅当char * s可以通过简单地跨越某些字母从char * t获得。这意味着两件事:
t
应包含s
的所有字符。因此,我们需要存储字符数。t
应包含s
的所有字符以及t
应具有与s
相同的常用字符。 解决方案A: t
中的字符顺序无关紧要。重要的是s
中的所有字符都应出现在t
中。
g("ERRT", "ERT") = false
g("ERRR", "ERRT") = false
g("ERRR", "RRRE") = true
bool g(char* s, char* t)
{
int hash[256] = {0};
int i;
for(i = 0; t[i]; ++i)
{
hash[t[i]] += 1;
}
for(i = 0; s[i]; ++i)
{
if(hash[s[i]] <= 0)
{
return false;
}
else
{
hash[s[i]] -= 1;
}
}
return true;
}
解决方案B: t
中的字符顺序很重要。此外,s
中的所有字符都应出现在t
。
g("ERRT", "RERT") = false
g("ERRR", "RRER") = false
g("ERRR", "RRRE") = false
g(“ ERTR ”,“R ER GR T B R ”)= true
bool g(char* s, char* t)
{
if(strcmp(LCS(s, t), s) == 0)
{
return true;
}
return false;
}
其中,LCS(s, t) =
Longest Common Subsequence
答案 1 :(得分:1)
如果找不到后者,您可以使用false
返回,否则成功:
bool g(const char* s, const char* t) {
for (int i = 0; s[i] != 0; i++) {
bool found = false;
for (int j = i; t[j] != 0; j++) {
if (s[i] == t[j]) {
found = true;
}
}
if (!found) {
return false;
}
}
return true;
}
另外,请考虑使用strspn
来计算匹配字符
bool g(const char* s, const char* t){
return strspn(s, t) == strlen(s);
}
答案 2 :(得分:0)
你可以这样做 -
bool g(char* s, char* t){
int sLen=strlen(s);
int tLen=strlen(t);
if(sLen > tLen)
{
return false;
}
int j=0;
for(int i=0;i<tLen;i++)
{
if(s[j] == t[i])
{
j++;
}
if(j == sLen)
{
return true;
}
}
return false;
}
答案 3 :(得分:0)
试试这个:
public void MoveToTop(ListBox lb, int index) {
var item = lb.Items[index];
lb.Items.RemoveAt(index);
lb.Items.Insert(0, item);
lb.Refresh();
}
public void MoveToBottom(ListBox lb, int index) {
var item = lb.Items[index];
lb.Items.RemoveAt(index);
lb.Items.Add(item);
lb.Refresh();
}
答案 4 :(得分:0)
我只用一个循环编写函数,用第二个循环代替标准C函数strchr
。例如
#include <iostream>
#include <iomanip>
#include <cstring>
bool g( const char *s, const char *t )
{
size_t m = std::strlen( s );
size_t n = std::strlen( t );
const char *p;
while ( ( m != 0 ) and not ( n < m ) and ( p = std::strchr( t, s[0] ) ) )
{
++p;
n -= p - t;
t = p;
--m;
++s;
}
return m == 0;
}
int main()
{
std::cout << "g( \"ERT\", \"EAARYT\" ) = "
<< std::boolalpha << g( "ERT", "EAARYT" ) << std::endl;
std::cout << "g( \"ERT\", \"ABCT\" ) = "
<< std::boolalpha << g( "ERT", "ABCT" ) << std::endl;
}
程序输出
g( "ERT", "EAARYT" ) = true
g( "ERT", "ABCT" ) = false