開発環境 |
Microsoft Visual C++ 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
Win32 コンソール アプリケーション |
プロジェクト名 |
StringBuiler |
アプリケーションの種類 |
コンソール アプリケーション |
追加のオプション |
空のプロジェクト |
clrtest.cpp
using namespace System;
using namespace System::Text;
int main()
{
StringBuilder^ sb = gcnew StringBuilder;
sb->Append("tako\n");
sb->Append("ika\n");
String^ s = sb->ToString();
Console::Write(s);
Console::ReadLine();
return 0;
}
StringBuiler.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *str;
int len;
int extent;
} StringBuilder;
//==============================================================================
void SBInit(StringBuilder *sb)
{
sb->len = 0;
sb->extent = 16;
sb->str = (char *)malloc(sb->extent);
sb->str[0] = '\0';
}
void SBTerm(StringBuilder *sb)
{
free(sb->str);
}
void SBAppend(StringBuilder *sb, const char *str)
{
int newLen;
int newExtent;
newLen = sb->len + strlen(str);
newExtent = sb->extent;
while (newExtent <= newLen) {
newExtent <<= 1;
}
if (sb->extent < newExtent) {
sb->extent = newExtent;
sb->str = (char *)realloc(sb->str, sb->extent);
fprintf(stderr, "newExtent=[%d]\n", newExtent);
}
strcpy(sb->str + sb->len, str);
sb->len = newLen;
}
//==============================================================================
int main(int argc, char *argv[], char *envp[])
{
StringBuilder sb;
SBInit(&sb);
while (*envp) {
SBAppend(&sb, *envp);
SBAppend(&sb, "\n");
envp++;
}
printf("%s", sb.str);
SBTerm(&sb);
return 0;
}
最終更新:2012年10月01日 07:45