【问题标题】:How to inverse string without library functions - C++如何在没有库函数的情况下反转字符串 - C++
【发布时间】:2017-09-20 09:18:41
【问题描述】:

我无法理解如何输出字符串的倒数,然后存储倒数并将其应用于字符串变量以稍后打印字符串。根据程序的结构,我收到的一些错误包括:正在打印随机字符,仅打印字符串输入,程序崩溃...程序必须能够处理此菜单:

在某一时刻,我有反向工作,但是当我添加例如 if(choice == '2') 并创建反向函数时,它会再次开始起作用。

这是我现在拥有的:

int main()
{
    string userString = "";
    int i = 0;
    char choice;
    char invChar = char(userString[i]);
    userString = invChar;



    cout << "Please enter a word, a sentence, or a string of numbers." << endl;
    getline(cin, userString);

    do
    {

        cout << "\nUSE THIS MENU TO MAINPULATE YOUR STRING\n"
             << "----------------------------------------" << endl;
        cout << "1) Inverse String\n" 
             << "2) Reverse String\n" 
             << "3) To Uppercase\n"
             << "4) Count Number Words\n" 
             << "5) Count Consonants\n" 
             << "6) Enter a Different String\n"
             << "7) Print the String\n" 
             << "Q) Quit" << endl;

        cin >> choice;
        cin.ignore();

        if (choice == '1')
        {
            for (int i = 0; i <= userString.length(); ++i)
            {
                if (isupper(userString[i]))
                {
                    char(tolower(userString[i])); // if uppercase - converts to lower - if upper keeps value
                    invChar += userString[i];

                }

                userString = invChar;

            }       

            cout << userString;


        }

    } while (choice != 'q' || choice != 'Q');

提前感谢您提供的任何提示和技巧!

【问题讨论】:

  • invChar += userString[i]; userString = invChar;可能是错误的行
  • 为什么不干脆写一个函数来做每一个操作,然后调用这个函数而不是把整个程序塞进main()
  • 另外,for 循环中有内存覆盖。

标签: c++ string char


【解决方案1】:

你是不是有意这样做:

for (int i = 0; i < userString.length(); ++i)
{
   if (isupper(userString[i]))
   {
       userString[i] = (tolower(userString[i]));
   }
   else if(islower(userString[i]))
   {
       userString[i] = (toupper(userString[i]));
   }
}

这实际上会相反。之前做的不行,也只能转大写

【讨论】:

  • 你看到那个循环中的内存覆盖错误了吗? i &lt;= userString.length()
  • @Eyal_K 那么如何将结果存储到字符串中?我们不需要先将 userString[i] 转换为 char,然后将结果存储到字符串中以便以后打印吗?
  • @PaulMcKenzie 你说的完全正确,我只是匆忙从原始示例中复制代码。现在已经修复了
  • @PaulMcKenzie 嘿,保罗,在我弄清楚如何让它工作之后,我会将它们写入函数。这是我收到的关于循环警告 C4018: ' 的错误
  • @FranticCode userString[i] 实际上已经是一个字符引用。用户输入的字符串在这里被修改,因为那是你想要打印的。如果需要,您可以保留原件的副本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多