使用C在字符串中插入每个单词的字符前面
发布时间:2020-12-16 09:26:55 所属栏目:百科 来源:网络整理
导读:我有一个字符串,例如; “骆驼,山羊,牛”,我只需要在每个单词前放一个’@’,这样我的字符串看起来就像“@ llama,@ goat,@ cow”,但我还需要这些值是动态的,并且在开头总是带着’@’. 不知道大量的C有人可以帮我找到解决这个问题的最简单方法吗?提前谢谢了.
我有一个字符串,例如; “骆驼,山羊,牛”,我只需要在每个单词前放一个’@’,这样我的字符串看起来就像“@ llama,@ goat,@ cow”,但我还需要这些值是动态的,并且在开头总是带着’@’.
不知道大量的C有人可以帮我找到解决这个问题的最简单方法吗?提前谢谢了. 解决方法
根据insertable的评论判断,(s?)他试图让这段代码工作……所以让我提出我的看法…
与其他人一样,我假设每个单词都由单个“,”分隔.如果您可以有多个字符分隔符,则需要添加第二个查找(即find_first_not_of)以查找每个单词的开头/结尾. 是的,您可以将’@’字符插入到预先存在的字符串中.但是除非你聪明,否则为每个单词插入会产生一些低效率(O(N ^ 2)).这种聪明之处通常伴随着高昂的维护/调试成本.所以我只会坚持使用两个字符串…… (使用STL算法应该有一些很好的方法.但我生病了,我现在还没看到如何适应插入……) 参考文献:C++-strings C++-strings STL count_if #include <iostream> #include <string> #include <algorithm> using namespace std; #define SHOW(X) cout << # X " = " << (X) << endl int main() { // 0123456789_123456789_1234 string inString(",llama,goat,cow,dog,cat"); string outString; /* This code assumes inString.size() > 0 */ const iterator_traits<string::iterator>::difference_type numberOfWords = count_if( inString.begin(),inString.end(),bind2nd( equal_to<char>(),',' ) ) + 1; string::size_type startIndex,endIndex; outString.reserve( inString.length() + numberOfWords ); for ( startIndex = endIndex = 0; endIndex != string::npos; startIndex = endIndex + 1 ) { outString += "@"; /* No startIndex+1 here. We set startIndex=endIndex+1 in the for loop */ endIndex = inString . find_first_of( ",",startIndex ); outString . append ( inString,startIndex,( (endIndex == string::npos) ? string::npos : endIndex - startIndex + 1) ); } SHOW( numberOfWords ); SHOW( inString ); SHOW( outString ); SHOW( inString.size() ); SHOW( outString.size() ); SHOW( inString.capacity() ); SHOW( outString.capacity() ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |