gpt4 book ai didi

c++ - 帮助代码改进和时间效率

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:49 28 4
gpt4 key购买 nike

我编写了一个程序来反转字符串中的每个单词。例如,你好和再见变成了 olleh dna eybdoog。我的程序可以运行,但是时间效率是 o(n^2),我可能可以写更少的代码。我试图不使用任何 string.functions() (我使用过 string.length() 一次)。任何提示或建议将不胜感激。

#include <iostream>
using namespace std;
void breakString(string& me, char * otherOne, int len, int count);
void reverseString(char* s);
int main () {
string me=("hello and goodbye");
char * otherOne;
int len=0;
int count=0;

for (len; len<me.length()+1; len++){
count++;
if (me[len]=='\0') {
otherOne=new char[count];
len-=count-1;
count=0;
for (len; me[len]; len++){
otherOne[count]=me[len];
count++;
}
reverseString(otherOne);
breakString( me, otherOne, len, count);
}
if (me[len]==' ' ) {
otherOne=new char[count];
len-=count-1;
count=0;
for (len; me[len] != ' '; len++){
otherOne[count]=me[len];
count++;
}
reverseString(otherOne);
breakString( me, otherOne, len, count);
count=0;
otherOne=NULL;
delete[]otherOne;
}

}
delete[]otherOne;
cout << me;
return 0;
}
void reverseString(char* s)
{

int len =0;
char swap;
for (len=0; s[len] != '\0'; len++);

for ( int i=0; i<len/2; i++)
{

swap = *(s+i);

*(s+i)= *(s+len-i-1);

*(s+len-i-1) = swap;


}
}


void breakString(string &me, char * otherOne, int len, int count){
len-=count;
for (count=0; otherOne[count]; count++){
me[len]=otherOne[count];
len++;
}
}

最佳答案

不是很简单,比如

#include <iostream>

using namespace std;

int main () {
string me=("hello and goodbye");
int i,j, index=0;
char tmp;

for (i=0; i<me.length()+1; i++)
if (me[i] == ' ' || me[i] == '\0') {
for(j=i-1;j>index;j--,index++) {
tmp = me[index];
me[index] = me[j];
me[j] =tmp;
}
index = i+1;
}

cout << me;
return 0;
}

?

复杂度为 O(n):每个单词被读取两次(或者更好,一次半):一次,因为程序找到一个空格或一个\0,然后,在嵌套的 for 中,单词被反转. index 表示单词起始字符。

关于c++ - 帮助代码改进和时间效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7342086/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com