在字符串C ++上添加下一个字符

问题描述 投票:1回答:2

我确实得到了字符串(hello-->ifmmp)上的下一个字符,但是在hello *的情况下我希望能够仍然显示*作为例外,它也可以是一个数字但是我猜它没关系,因为它不在字母表中。

这是我的代码,如果是其他应该在哪里呢?有另一种选择,但我没有找到它优化,它是在第一个for循环内添加:

string other="123456789!@#$%^&*()";

 for(int z=0;z<other.length();z++)
   {
       if(str[i]==other[z])
       str2+=other[z];
   }

那么这是主要代码;

int main()
{

string str = "hello*";
string str2="";
string alphabet = "abcdefghijklmnopqrstuvwxyz";
  for(int i=0;i<str.length();i++)
  {
   for(int j=0;j<alphabet.length();j++)
   {
       if(str[i]==alphabet[j])
       {
       str2+=alphabet[j+1];
       }

   }

  }

    cout<<str2<<endl;

    return 0;
}
c++
2个回答
1
投票

我喜欢功能。他们解决了很多问题。例如,如果您使用已有的代码,将其粘贴到函数中,并进行一些调整

char findreplacement(char ch, const std::string & alphabet)
{
    for (int j = 0; j < alphabet.length(); j++)
    {
        if (ch == alphabet[j])
        {
            return alphabet[(j+1) % alphabet.length()]; 
            // return the replacement character
            // using modulo, %, to handle wrap around z->a
        }
    }
    return ch; // found no replacement. Return original character.
}

你可以调用这个函数

for (int i = 0; i < str.length(); i++)
{
    str2 += findreplacement(str[i], alphabet);
}

建立str2。考虑在这里使用基于范围的for

for (char ch: str)
{
    str2 += findreplacement(ch, alphabet);
}

搞砸了,更难搞砸了。


1
投票

标准库中有一个函数isalpha,它对分类非常有用。

你可以这样做。

(这种练习通常采用英文字母的ASCII编码,这是一种非常特定于ASCII的解决方案。如果你想要一个不同的字母或不同的字符编码,你需要自己处理。)

#include <cctype>
#include <string>
#include <iostream>

int main()
{
    std::string str = "Hello*Zzz?";
    std::string str2;
    for (char c: str)
    {
        if (std::isalpha(c))
        {
            c += 1;
            if (!std::isalpha(c)) 
            {
                 // Went too far; wrap around to 'a' or 'A'.
                 c -= 26;
            }
        }
        str2 += c;
    }
    std::cout << str2 << std::endl;
}

输出:

Ifmmp*Aaa?
© www.soinside.com 2019 - 2024. All rights reserved.