示例:如果输入是DOGS LIKE CATS 输出 - CATS LIKE DOGS
考虑到我必须只使用:If-else条件,而& for循环,数组,字符串和函数。不是字符串函数,指针和&动态内存分配&结构。 空格也需要与示例相同。
我尝试做以下事情,但它不起作用,你可以帮忙吗?
void revSent(char str[]){
char temp[100];
int k;
for (i=sentenceSize ; i>0 ; i--)
for (k=0 ; k<sentenceSize ; k++)
temp[k]=str[i];
for (k=0 ; k<sentenceSize ; k++)
if (temp[k]!=' ')
for (i=k ; i>0 ; i--)
printf("%c", temp[i]);
}
答案 0 :(得分:9)
这很容易就地完成,没有任何额外的数据结构:
反转整个字符串:DOGS LIKE CATS
- &gt; STAC EKIL SGOD
反转字符串中的每个字:STAC EKIL SGOD
- &gt; CATS LIKE
DOGS
提示:您可以对(1)和(2)使用相同的功能。
答案 1 :(得分:5)
您可以实施以下内容以获得解决方案:
答案 2 :(得分:3)
如果您将单词定义为以空格分隔的标记,则以下内容将执行:
std::vector<std::string> sentence;
std::copy(std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
std::back_inserter(sentence));
std::reverse(sentence.begin(), sentence.end());
从本质上讲,您希望从单词的定义开始,然后将单词放在容器中,最后使用std::reverse()
来反转它们。
对于算法作业,教师可能不会对此感到满意。您想要创建一个将句子拆分为单词的函数。当然,您可以使用相同字符串中的指针 - 这可能是您的教师的意图,但如果这不是您必须的,那么我个人觉得更容易使用容器。
答案 3 :(得分:2)
我会给出一个提示:由于你不能使用数据结构,你不能直接使用Paul或OJ的方法。但是,递归函数调用会形成一个堆栈。
答案 4 :(得分:0)
瞧!
答案 5 :(得分:0)
谁说STL没用?
根据您的操作方式,有不同的方法可以解决此问题。
我的方式就是:
while (original_string isn't empty){
take first word
prepend to reversed string
}
这是C ++解决方案(使用find和substr,两个非常有用的字符串函数)
using namespace std;
string word_reverse(string original){
string reverse_string;
if (original.find(' ')!=string::npos){
do{
int pos=original.find(' ');
//prepend word
reverse_string=original.substr(0,pos)+' '+reverse_string;
//remove word from original,considering the found whitespace
original=original.substr(pos+1,original.length()-(pos+1));
}while(original.find(' ')!=string::npos);
//don't forget the last word!
return original+' '+reverse_string;
}
else{//no whitespace: return original text
return original;
}
}