我必须创建一个函数来反转已写入char数组中的单词。
char reverse(char m[50]) {
for (int i = 0; i <= m['\0']; i++) {
for (int j = m['\0']-1; j >= m[0]; j--) {
m[i] = m[j];
}
}
}
这是我想到的代码,它将输出如下内容:
输入:I am new
输出:wen ma I
我需要的是:
输入:I am new
输出:I ma wen
希望您能理解我的意思,因为我是编程新手,因此确实需要帮助。
答案 0 :(得分:2)
如果您要使用c ++解决方案,则可以使用以下方法:
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string str = "I am new";
auto begin = str.begin();
while (begin != str.end())
{
auto end = std::find(begin, str.end(), ' ');
std::reverse(begin, end);
if (end == str.end())
{
break;
}
begin = end + 1;
}
std::cout << str << "\n";
}
答案 1 :(得分:1)
由于不仅空格可以分隔单词,还应该考虑其他空格。
#include <iostream>
bool IsWhiteSpaceOrEnd(char c) {
switch (c) {
case ' ':
case '\t':
case '\r':
case '\n':
case 0:
return true;
}
return false;
}
void ReverseWord(char* begin, char* end) {
--end;
while (begin < end) {
char temp = *begin;
*begin = *end;
*end = temp;
++begin;
--end;
}
}
void ReverseEachWord(char* str) {
char* begin = str;
while (0 != *begin) {
char* end = begin + 1;
// find next end of word
while (!IsWhiteSpaceOrEnd(*end)) {
++end;
}
// reverse the word between begin and end
ReverseWord(begin, end);
begin = end;
// go forward to the next begin of a word
while ((0 != *begin) && IsWhiteSpaceOrEnd(*begin)) {
++begin;
}
}
}
int main(int argc, char** argv)
{
char* text = strdup("I am new");
ReverseEachWord(text);
return 0;
}
答案 2 :(得分:1)
我将char数组的输入和输出转换为字符串,至少用于处理。如果确实需要,可以将结果转换回char数组。
string ReverseText(const string& text)
{
string word(""), result("");
for (const auto& character : text)
{
if (!isspace(character))
word += character; // Build the next word to reverse
else
{
std::reverse(word.begin(), word.end()); // Reverse the completed word
result += word + character; // Add your processed word to the result
word = ""; // Clear word variable for next iteration
}
}
std::reverse(word.begin(), word.end()); // Don't forget the last word built
return result + word;
}