仅选择字符串 C++ 中的前几个字符
Selecting only the first few characters in a string C++
我想 select 使用 C++ 的字符串的前 8 个字符。现在我创建了一个 8 个字符长的临时字符串,并用另一个字符串的前 8 个字符填充它。
但是,如果另一个字符串的长度不是 8 个字符,我就会留下不需要的空格。
string message = " ";
const char * word = holder.c_str();
for(int i = 0; i<message.length(); i++)
message[i] = word[i];
如果 word
是 "123456789abc"
,此代码可以正常工作并且 message
包含 "12345678"
。
但是,如果 word
更短,比如 "1234"
,消息最终会变成 "1234 "
如何 select 字符串的前八个字符或整个字符串(如果它短于 8 个字符)?
只需使用std::string::substr
:
std::string str = "123456789abc";
std::string first_eight = str.substr(0, 8);
只需在字符串上调用 resize。
如果我没看错你就写
std::string message = holder.substr( 0, 8 );
如果你需要从字符数组中抓取字符,那么你可以这样写
const char *s = "Some string";
std::string message( s, std::min<size_t>( 8, std::strlen( s ) );
char* messageBefore = "12345678asdfg"
int length = strlen(messageBefore);
char* messageAfter = new char[length];
for(int index = 0; index < length; index++)
{
char beforeLetter = messageBefore[index];
// 48 is the char code for 0 and
if(beforeLetter >= 48 && beforeLetter <= 57)
{
messageAfter[index] = beforeLetter;
}
else
{
messageAfter[index] = ' ';
}
}
这将创建一个适当大小的字符数组并传输每个数字字符 (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');
如果最大值为 8,它将停在那里。但是你必须设置
const char * word = holder.c_str();
到8。我相信你可以通过写
来做到这一点
const int SIZE = 9;
char * word = holder.c_str();
让我知道这是否有效。
如果他们在任何时候点击 space,它只会读取到 space。
我想 select 使用 C++ 的字符串的前 8 个字符。现在我创建了一个 8 个字符长的临时字符串,并用另一个字符串的前 8 个字符填充它。
但是,如果另一个字符串的长度不是 8 个字符,我就会留下不需要的空格。
string message = " ";
const char * word = holder.c_str();
for(int i = 0; i<message.length(); i++)
message[i] = word[i];
如果 word
是 "123456789abc"
,此代码可以正常工作并且 message
包含 "12345678"
。
但是,如果 word
更短,比如 "1234"
,消息最终会变成 "1234 "
如何 select 字符串的前八个字符或整个字符串(如果它短于 8 个字符)?
只需使用std::string::substr
:
std::string str = "123456789abc";
std::string first_eight = str.substr(0, 8);
只需在字符串上调用 resize。
如果我没看错你就写
std::string message = holder.substr( 0, 8 );
如果你需要从字符数组中抓取字符,那么你可以这样写
const char *s = "Some string";
std::string message( s, std::min<size_t>( 8, std::strlen( s ) );
char* messageBefore = "12345678asdfg"
int length = strlen(messageBefore);
char* messageAfter = new char[length];
for(int index = 0; index < length; index++)
{
char beforeLetter = messageBefore[index];
// 48 is the char code for 0 and
if(beforeLetter >= 48 && beforeLetter <= 57)
{
messageAfter[index] = beforeLetter;
}
else
{
messageAfter[index] = ' ';
}
}
这将创建一个适当大小的字符数组并传输每个数字字符 (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');
如果最大值为 8,它将停在那里。但是你必须设置
const char * word = holder.c_str();
到8。我相信你可以通过写
来做到这一点 const int SIZE = 9;
char * word = holder.c_str();
让我知道这是否有效。
如果他们在任何时候点击 space,它只会读取到 space。