如何向后输出char数组中的每个单词

时间:2018-12-18 15:53:33

标签: c++

我必须创建一个函数来反转已写入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

希望您能理解我的意思,因为我是编程新手,因此确实需要帮助。

3 个答案:

答案 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;
}