2

私はここにこのコードを持っています

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

void main()
{
  char s[] = "All work and no play makes Jack a dull boy.";
  char word[10],rpwrd[10],str[10][10];
  int i=0,j=0,k=0,w,p;

  printf("All work and no play makes Jack a dull boy.\n");
  printf("\nENTER WHICH WORD IS TO BE REPLACED\n");
  scanf("%s",word);
  printf("\nENTER BY WHICH WORD THE %s IS TO BE REPLACED\n",word);
  scanf("%s",rpwrd);
  p=strlen(s);

  for (k=0; k<p; k++)
    {
      if (s[k]!=' ')
        {
          str[i][j] = s[k];
          j++;
        }
      else
        {
          str[i][j]='\0';
          j=0; i++;
        }
    }

  str[i][j]='\0';
  w=i;

  for (i=0; i<=w; i++)
    {
      if(strcmp(str[i],word)==0)
        strcpy(str[i],rpwrd);

      printf("%s ",str[i]);
    }
  getch();
}

「ジャック」という単語を置き換えるにはどうすればよいですか?お気に入り

出力:

All work and no play makes Jack a dull boy.

Enter ther word Jack to be Replaced
Mark
Tom

All work and no play makes Mark a dull boy.
All work and no play makes Tom a dull boy.

文全体を検索せずに。

どうも

4

5 に答える 5

3

文全体を検索せずに。

行全体を検索する必要があります。

char sentence[] = "The quick brown fox jumped over the lazy dog.";
const char *to_replace = "fox";
const char *replacement = "dragon";

char *pos = strstr(sentence, to_replace);

// if found
if (pos != NULL) {
    // The new string
    size_t newlen = strlen(sentence) - strlen(to_replace) + strlen(replacement);
    char new_sentence[newlen + 1];

    // Copy the part of the old sentence *before* the replacement
    memcpy(new_sentence, sentence, pos - sentence);

    // Copy the replacement
    memcpy(new_sentence + (pos - sentence), replacement, strlen(replacement));

    // Copy the rest
    strcpy(new_sentence + (pos - sentence) + strlen(replacement), pos + strlen(to_replace));

    printf("Old: %s\nNew: %s\n", sentence, new_sentence);
}
于 2013-03-17T20:28:31.123 に答える
0

最速の方法は、新しい文字列を割り当てることですstrlen (s) - strlen (word) + strlen (rpwrd) + 1。次に、strstr関数を使用して置換する単語を見つけ、その時点までを新しい文字列にコピーし、新しい単語を追加してから、元の文の残りを新しい文字列にコピーします。

于 2013-03-17T20:27:14.010 に答える
0

またはchar*を使用して、 を宣言し、動的メモリを割り当てる必要があります。これは、単語が置換された単語よりも長くなる場合に表示されます。第 2 に、文字列を検索して特定の文字列に置き換える 関数が多数あります。部分文字列を見つけて文字列内の位置を返す関数があります。についてですが、-Headerについてはこちらを参考にしてください。malloccalloc
<string.h>strstrC++<string.>

于 2013-03-17T20:28:12.280 に答える
0
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="This is a simple string made with simple code";
  char * pch;
  int i=0,count=0;
  for(i=0;i<strlen(str);i++){
    if(str[i]=='s'&& str[i+1]=='i'&&str[i+2]=='m'&&str[i+3]=='p' && str[i+4]=='l' && str[i+5]=='e'){
        count++;
      }
  }
  for(i=1;i<=count;i++){
    pch = strstr (str,"simple");
    strncpy (pch,"sample",6);
  }

  puts (str);
  return 0;
}
于 2017-11-19T05:09:46.620 に答える