加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用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() );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读