【问题标题】:How do I check for EACH individual letters in a string to see if they're alphabetical characters and not digits?如何检查字符串中的每个单个字母以查看它们是否是字母字符而不是数字?
【发布时间】:2022-06-10 17:43:28
【问题描述】:

我正在处理一项作业 (C++),我必须让用户写出一串文本(输入示例:1hello22)。

任务也是一个一个地删除数字。所以输出会是这样的:

  1. 1hello22
  2. 你好22
  3. 你好2
  4. 你好

如何检查此循环中的每个字符串字母?我不能让它重演。我假设我需要在这里使用嵌套的 for 循环,但我被卡住了,我不确定如何继续。

这是我目前所得到的:

 cout<<"Enter some text:";
                            cin.ignore();
                                    getline(cin,userText);
                            system("clear");
                            for (q=0;q<=(userText.length());q++)
                            {
                                if (isalpha(userText.at(q))) //checks for alphabet
                                {
                                  q++;
                                  cout<<userText<<endl;
                                
                                }
                                else
                                {
                                  userText.erase(q,1); //gets rid of number
                                  q++;
                                  cout<<userText<<endl;
                                }
                        
                            }  

【问题讨论】:

  • 创建一个 std:;stringstream。通过输入字符串解析,如果字符是字母,则将该字符添加到字符串流中,否则跳过它。
  • 另外,按顺序删除字符是什么意思?并且请正确格式化代码,这么多缩进很难阅读。
  • 我们还没有学会如何使用 std::stringsteam :( 你建议我这样学习或者你会推荐什么?另外,抱歉缩进。c/p 从 IDE 做了一些奇怪的事情: (将在几个小时内修复,现在在床上试图赶上我 3 小时的睡眠。谢谢您的回复
  • 我认为您应该首先澄清按顺序删除字符是什么意思。根据澄清,我最初的建议可能会改变。
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: c++ string digits alphabetical


【解决方案1】:

您的代码有许多 q++ 表达式。您应该将其从 for (q=0;q&lt;=(userText.length());q++)else 子句中删除。

除此之外,for 循环的条件必须是&lt;(不是&lt;=),因为字符串的最后一个字符的索引为length() - 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2017-04-14
    相关资源
    最近更新 更多