C言語関係掲示板

過去ログ

No.1306 文字列の中にスペースがあったら、文字を追加したい

[戻る] [ホームページ]
No.17575

文字列の中に文字を埋め込め
投稿者---素人(2004/10/27 23:10:56)


お世話になります。
題名の件で、文字列の中にスペースがあったら、文字を追加したい。
例えば、"test xls doc" → "test and xls and doc"という形で。
何かアドバイスを頂けないでしょうか?

int i ;
int j ;
char buf[256] ;


for( i = 0, j = 0 ; buf[i] ; i ++ ) {
 if( buf[i] == ' ' ) {

  /* 文字を埋め込む */

 }
}

宜しくお願い申し上げます。



No.17576

Re:文字列の中に文字を埋め込め
投稿者---επιστημη(2004/10/28 07:20:02)


>題名の件で、文字列の中にスペースがあったら、文字を追加したい。
>例えば、"test xls doc" → "test and xls and doc"という形で。
#include <stdio.h>
#include <string.h>

int main() {
  char input[] = "test xls doc";
  const char* replacement = " and ";
  char result[100];
  result[0] = '\0';
  char* p;
  for ( p = strtok(input, " "); p; p = strtok(0, " ")) {
   strcat(result, p);
   strcat(result, replacement);
  }
  result[strlen(result)-strlen(replacement)] = '\0';
  printf("[%s]", result);
  return 0;
}



No.17581

Re:文字列の中に文字を埋め込め(解決)
投稿者---素人(2004/10/28 09:30:45)


おはようございます。
回答して頂きありがとうございます。
文字列の中にうまく文字を埋め込むことが出来ました。
こんな素人な私が、恥ずかしい限りです。
大変勉強になり、ありがとうございました。

>>題名の件で、文字列の中にスペースがあったら、文字を追加したい。
>>例えば、"test xls doc" → "test and xls and doc"という形で。
>#include <stdio.h>
>#include <string.h>
>
>int main() {
>  char input[] = "test xls doc";
>  const char* replacement = " and ";
>  char result[100];
>  result[0] = '\0';
>  char* p;
>  for ( p = strtok(input, " "); p; p = strtok(0, " ")) {
>   strcat(result, p);
>   strcat(result, replacement);
>  }
>  result[strlen(result)-strlen(replacement)] = '\0';
>  printf("[%s]", result);
>  return 0;
>}




No.17579

Re:文字列の中に文字を埋め込め
投稿者---かずま(2004/10/28 09:23:50)


> 題名の件で、文字列の中にスペースがあったら、文字を追加したい。
> 例えば、"test xls doc" → "test and xls and doc"という形で。
出力配列が入力文字列と異なる場合

#include <stdio.h>

void sub(const char *in, const char *add, char *out)
{
    const char *p;
    do {
        if (*in == ' ') {
            *out++ = ' ';
            for (p = add; *p; *out++ = *p++) ;
        }
    } while (*out++ = *in++);
}

int main(void)
{
    char buf[256];

    sub("test xls doc", "and", buf);
    printf("[%s]\n", buf);
    return 0;
}

----------------------------------------------------------------------
入出力が同じ配列の場合

#include <stdio.h>

void sub(char *in_out, const char *add)
{
    char *in, *out;  const char *p;  int len;

    for (p = add; *p; p++) ;
    len = p - add;
    for (out = in = in_out; *in; in++, out++)
        if (*in == ' ') out += len + 1;
    *out = '\0';
    while (out > in) {
        *--out = *--in;
        if (*in == ' ') {
            for (p = add + len; p > add; *--out = *--p) ;
            *--out = ' ';
        }
    }
}

int main(void)
{
    char buf[256] = "test xls doc";

    sub(buf, "and");
    printf("[%s]\n", buf);
    return 0;
}