只选择字符串C++中的前几个字符 < >我想用C++选择字符串的前8个字符。现在我创建了一个8个字符长的临时字符串,并用另一个字符串的前8个字符填充它

只选择字符串C++中的前几个字符 < >我想用C++选择字符串的前8个字符。现在我创建了一个8个字符长的临时字符串,并用另一个字符串的前8个字符填充它,c++,string,c-strings,C++,String,C Strings,但是,如果另一个字符串不是8个字符长,则会留下不需要的空白 string message = " "; const char * word = holder.c_str(); for(int i = 0; i<message.length(); i++) message[i] = word[i]; 如果word是123456789abc,则此代码工作正常,消息包含12345678 然而,若单词较短,如1234,则消息最终为1234 如何选择字符串的前八个字符,或

但是,如果另一个字符串不是8个字符长,则会留下不需要的空白

string message = "        ";

const char * word = holder.c_str();

for(int i = 0; i<message.length(); i++)
    message[i] = word[i];
如果word是123456789abc,则此代码工作正常,消息包含12345678

然而,若单词较短,如1234,则消息最终为1234

如何选择字符串的前八个字符,或者如果短于8个字符,如何选择整个字符串?

只需使用std::string::substr:


只要调用字符串即可。

如果我理解正确,您只需写信即可

std::string message = holder.substr( 0, 8 );
Jf您需要从字符数组中获取字符,然后可以编写示例

const char *s = "Some string";

std::string message( s, std::min<size_t>( 8, std::strlen( s ) );
这将创建一个大小合适的字符数组,并在每个数字字符0-9上传输,并用空格替换非数字字符。这听起来像你要找的

考虑到其他人根据您的问题所做的解释,您可以轻松修改上述方法,以生成一个只包含数字部分的字符串

比如:

int length = strlen(messageBefore);
int numericLength = 0;
while(numericLength < length &&
      messageBefore[numericLength] >= 48 &&
      messageBefore[numericLength] <= 57)
{
    numericLength++;
}
然后在前面的逻辑中使用numericLength代替length,您将得到第一组数字字符

希望这有帮助

或者您可以使用以下选项:

#include <climits>
cin.ignore(numeric_limits<streamsize>::max(), '\n');
到八点。我相信你可以通过写作来做到这一点

 const int SIZE = 9;
 char * word = holder.c_str();
让我知道这是否有效


如果他们在任何一点击中空格,它只能读到空格。

他的问题模棱两可,无法判断我们的答案中哪一个是正确的。这取决于OP在删除字符串中的其他字符时对字符串的含义。如果第一个字符串少于8个字符,对其执行substr会改变字符串的任何内容吗?但是感谢您的快速回答,它工作得非常好。@qlear您应该阅读文档-substr是一个常量方法,ie在任何情况下都不会更改对象本身。@qlear将引发std::out_of_range异常。正如Slava所说,std::string::substr不会修改它所调用的字符串;它将返回一个新字符串。要了解在不进行任何间接操作的情况下自行修改字符串的方法,请参阅DavidSchwartz的答案。
#include <climits>
cin.ignore(numeric_limits<streamsize>::max(), '\n');
const char * word = holder.c_str();
 const int SIZE = 9;
 char * word = holder.c_str();