首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于字符串联接

2013-03-27 
关于字符串连接请教各位大大一个问题,我现在要将一组字符串保存起来。字符串格式如下:同学一:[start,finish

关于字符串连接
请教各位大大一个问题,我现在要将一组字符串保存起来。字符串格式如下:
同学一:[start,finish].其中start和finish是两个int型变量。他们在一个循环里面,也就是说这个字符串会出现多次,我想把每次出现的这个字符串都保存起来应该怎么实现。用数组还是什么的?
我是定义的一个char*数组buff,
buff[0]="同学一:"+"["+start+","+finish+"]"
我这种拼接方法明显不对。但是我不知道应该怎么实现,麻烦各位教教我
[解决办法]
做作业咯

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct tagString
{
  char str[1];
}string;

string* create(char const* str)
{
   size_t len = strlen(str);
   string* s = (string*)malloc(sizeof(string)+len);
   if(s)
   {
     strcpy(s->str, str);
   }
   return s;
}

string* concate(string * a, char const* b)
{
  if(a)
  {
    size_t len = strlen(a->str) + strlen(b);
    string* s = (string*)realloc(a, sizeof(string)+len);
    if(s)
    {
      strcat(s->str, b);
    }
    else
    {
      free(a);
    }
    return s;
  }
  else
  {
    return create(b);
  }
}

string* toString(char const* lable, int index, int start, int end)
{
  char buf[32];
  string* s = create(lable);
  sprintf(buf,"%d", index);
  s = concate(s, buf);
  s = concate(s, ": [");
  sprintf(buf,"%d", start);
  s = concate(s, buf);
  s = concate(s,",");
  sprintf(buf,"%d", end);
  s = concate(s, buf);
  s = concate(s, "]");
}

typedef struct tagRecord
{
  int start;
  int end;
}record;

int main()
{
  enum 
  {
    N = 3
  };
  record rs[N] ={ {1, 5}, {6, 10}, {11, 20}};
  string* ss[N] = {0};
  int i = 0;
  for(i = 0; i < N; ++i)
  {
      ss[i] = toString("同学", i+1, rs[i].start, rs[i].end);
  }
  
  for(i = 0; i < N; ++i)
  {
      puts(ss[i]->str);
  }
  
  for(i = 0; i < N; ++i)
  {
      free(ss[i]);
  }  
  return 0;  
}

[解决办法]
引用:
请教各位大大一个问题,我现在要将一组字符串保存起来。字符串格式如下:
同学一:[start,finish].其中start和finish是两个int型变量。他们在一个循环里面,也就是说这个字符串会出现多次,我想把每次出现的这个字符串都保存起来应该怎么实现。用数组还是什么的?


我是定义的一个char*数组buff,
buff[0]="同学一:"+"["+start+"……


c++,简单直接。

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

string msg_format(int i, int start, int finish)
{
stringstream ss;
ss << "同学" << i << ": [" << start << ", " << finish << "]";
return ss.str();
}

int main(int argc, char **argv)
{
string stu[10];
stu[1] = msg_format(1, 30, 50);
stu[2] = msg_format(2, 70, 90);

for (int i = 1; i <= 2; ++i)
{
cout << stu[i] << endl;
}

return 0;
}

热点排行
Bad Request.