[英]Why am I getting incomplete reversed string
对于像这样的字符串输入 - “i.like.this.program.very.much”,输出应该是“much.very.program.this.like.i”。
这是我的代码 -
void func(string s,int n){
vector<string>v;
string temp="";
for(int j=0;j<n;j++){
if(s[j]!='.'){
temp+=s[j];
}
else{
v.push_back(temp);
temp="";
}
}
reverse(v.begin(),v.end());
for(int i=0;i<v.size();i++){
cout<<v[i]<<".";
}
cout<<"\n";
}
这里'n'是字符串长度,'s'是字符串。 我得到的输出为 - “very.program.this.like.i.”
else 块仅在遇到句点时执行。 由于字符串末尾没有句点,因此它永远不会推回最后一个单词。
void func(string s, int n) {
vector<string>v;
string temp = "";
for (int j = 0; j < n; j++) {
if (s[j] != '.') {
temp += s[j];
}
else {
v.push_back(temp);
temp = "";
}
}
// v.push_back(temp); This will push the last word / letters
reverse(v.begin(), v.end());
for (int i = 0; i < v.size(); i++) {
cout << v[i] << ".";
}
cout << "\n";
}
void func(string s,int n){
vector<string>v;
string temp="";
for(int j=0;j<n;j++){
if(s[j]!='.' || j==0){
temp+=s[j];
}
else{
v.push_back(temp);
temp="";
}
}
reverse(v.begin(),v.end());
for(int i=0;i<v.size();i++){
cout<<v[i]<<".";
}
cout<<"\n";
}
仅当当前索引字符是句点时,代码中的语句才会附加该字符。
首先,第一个参数应该是对std::string
类型对象的常量引用。
void func( const string &s, int n);
但是如果编译器支持 C++ 17 标准,那么第一个参数最好是std::string_view
类型。
第二个参数是多余的。
该函数应该返回反转的字符串。
您可以使用字符串流代替使用循环。
在循环中最后一个符号'.'
之后的子串未附加到向量。
最好使用容器 std::forward_list 而不是向量,因为您不需要反转其元素。
我可以建议以下函数定义,如下面的演示程序所示。
#include <iostream>
#include <string>
#include <forward_list>
#include <iterator>
#include <sstream>
std::string reverse( const std::string &s, char c = '.' )
{
std::istringstream is( s );
std::forward_list<std::string> list;
std::string word;
while ( getline( is, word, c ) ) list.push_front( word );
bool first = true;
std::string result;
result.reserve( s.size() );
for ( const auto &item : list )
{
if ( !first ) result += c;
else first = false;
result += item;
}
return result;
}
int main()
{
std::string s( "i.like.this.program.very.much" );
std::cout << reverse( s ) << '\n';
return 0;
}
程序输出是
much.very.program.this.like.i
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.