为什么我不能在分配数字后显示我的字符串值?
Why i can't to display my string value after assign number to it?
我想从我的字符串中获取所有数字,然后将它们推送到矢量,但在此之前我想显示我的 "string number" 的值以检查效果,问题是我看不到它.
string napis = "ada87dasu3da1";
string number = "";
int counter = 0;
for(int i = 0; i < napis.size(); i++){
if(isdigit(napis[i]) == true){
number[counter] = (char)napis[i];
counter++;
}else if(isdigit(napis[i]) == false && isdigit(napis[i-1]) == true)
cout << number; // <- there is a problem
counter = 0;
}
number[i] = ...
不会像您期望的那样附加 一个新字符。它 修改 给定索引处的现有字符,但没有要修改的字符,因为 number
始终为空!您没有做任何事情来增加它的 size()
.
您需要使用字符串的 push_back()
或 operator+=
代替:
number.push_back(napis[i]);
number += napis[i];
此外,当 i
为 0 时,isdigit(napis[i-1])
超出范围,在您的示例中就是这种情况,因为 napis
的第一个字符不是数字。您根本不需要在 else
中检查 isdigit()
。而且您也不需要 counter
。
试试这个:
string napis = "ada87dasu3da1";
string number;
for(size_t i = 0; i < napis.size(); ++i){
if (isdigit(napis[i]){
number += napis[i];
}
else if (!number.empty()) {
cout << number << flush;
number.clear();
}
}
if (!number.empty()){
cout << number << flush;
}
也就是说,还有其他方法可以编写此代码,不需要您手动检查和附加每个单独的字符,例如:
const char *digits = "0123456789";
string napis = "ada87dasu3da1";
string number;
string::size_type start = napis.find_first_of(digits);
while (start != string::npos) {
string::size_type end = napis.find_first_not_of(digits, start + 1);
if (end == string::npos) {
number = napis.substr(start);
start = napis.size();
}
else {
number = napis.substr(start, end - start);
start = end + 1;
}
cout << number << flush;
start = napis.find_first_of(digits, start);
}
我想从我的字符串中获取所有数字,然后将它们推送到矢量,但在此之前我想显示我的 "string number" 的值以检查效果,问题是我看不到它.
string napis = "ada87dasu3da1";
string number = "";
int counter = 0;
for(int i = 0; i < napis.size(); i++){
if(isdigit(napis[i]) == true){
number[counter] = (char)napis[i];
counter++;
}else if(isdigit(napis[i]) == false && isdigit(napis[i-1]) == true)
cout << number; // <- there is a problem
counter = 0;
}
number[i] = ...
不会像您期望的那样附加 一个新字符。它 修改 给定索引处的现有字符,但没有要修改的字符,因为 number
始终为空!您没有做任何事情来增加它的 size()
.
您需要使用字符串的 push_back()
或 operator+=
代替:
number.push_back(napis[i]);
number += napis[i];
此外,当 i
为 0 时,isdigit(napis[i-1])
超出范围,在您的示例中就是这种情况,因为 napis
的第一个字符不是数字。您根本不需要在 else
中检查 isdigit()
。而且您也不需要 counter
。
试试这个:
string napis = "ada87dasu3da1";
string number;
for(size_t i = 0; i < napis.size(); ++i){
if (isdigit(napis[i]){
number += napis[i];
}
else if (!number.empty()) {
cout << number << flush;
number.clear();
}
}
if (!number.empty()){
cout << number << flush;
}
也就是说,还有其他方法可以编写此代码,不需要您手动检查和附加每个单独的字符,例如:
const char *digits = "0123456789";
string napis = "ada87dasu3da1";
string number;
string::size_type start = napis.find_first_of(digits);
while (start != string::npos) {
string::size_type end = napis.find_first_not_of(digits, start + 1);
if (end == string::npos) {
number = napis.substr(start);
start = napis.size();
}
else {
number = napis.substr(start, end - start);
start = end + 1;
}
cout << number << flush;
start = napis.find_first_of(digits, start);
}