C 如何删除句子中的字符串?

C 如何删除句子中的字符串?,c,arrays,C,Arrays,我有一个家庭作业,要求我删除句子中的每一个随机单词。例如,当我键入:“Hello asjdasjdas my asdjasidj name kasdjas is asjdoaisd Felix sadads”时,输出将删除随机单词,它将是“Hello my name is Felix”。我尝试使用if检测字符串,但我不知道如何将其转换为数组到二维,以便删除字符串 int testcase; char kalimat[100]; scanf("%d",&testca

我有一个家庭作业,要求我删除句子中的每一个随机单词。例如,当我键入:
“Hello asjdasjdas my asdjasidj name kasdjas is asjdoaisd Felix sadads”
时,输出将删除随机单词,它将是
“Hello my name is Felix”
。我尝试使用if检测字符串,但我不知道如何将其转换为数组到二维,以便删除字符串

    int testcase;
    char kalimat[100];
    scanf("%d",&testcase);

    for(int i = 0; i < testcase; i++){
        scanf("%d",&length);
        scanf("%[^\n]",kalimat);

        for(int j = 0; j < length;j++){
            if(kalimat[j-1] == ' ' || kalimat[j+1] == ' ' ){
                // How to remove the string?
            }
        }

    }   
int测试用例;
char kalimat[100];
scanf(“%d”和testcase);
for(int i=0;i
如果要将其转换为二维阵列,可以按如下方式进行:

#include <stdio.h>

int main(void) {
  char sentence[]="Hello World";
  char arr[2][20];
  int i,j,word;
  for(i=0,j=0,word=0;sentence[i]!='\0';i++){
    if(sentence[i]!=' ') {
      arr[word][j]=sentence[i];
      j++;
    }
    else{
      arr[word][j]='\0';
      word++; j=0;
    }
  }
  arr[word][j]='\0';
  printf("%s\n%s",arr[0],arr[1]);
  return 0;
}
char string[] = "Hasta-la-vista-baby";
char delimiter[] = "-";
char *ptr = NULL;
bool bRandomWord = false;

//first token
ptr = strtok(string, delimiter);

while(ptr != NULL)
{
    printf("Found: %s\n", ptr);
    bRandomWord = Check(ptr); // you'll have to implement this
    if (!bRandomWord)
    {
        // you can copy ptr here to a char[][] using strcpy(_n)
    }
    // next tokens
    ptr = strtok(NULL, delimiter);
}
#包括
内部主(空){
字符句子[]=“你好,世界”;
char-arr[2][20];
int i,j,单词;
for(i=0,j=0,word=0;句子[i]!='\0';i++){
如果(句子[i]!=''){
arr[word][j]=句子[i];
j++;
}
否则{
arr[word][j]='\0';
word++;j=0;
}
}
arr[word][j]='\0';
printf(“%s\n%s”,arr[0],arr[1]);
返回0;
}

使用
strtok
可以标记字符串(字符数组)。请注意:字符串已更改,请使用副本! 您可以尝试以下方法:

#include <stdio.h>

int main(void) {
  char sentence[]="Hello World";
  char arr[2][20];
  int i,j,word;
  for(i=0,j=0,word=0;sentence[i]!='\0';i++){
    if(sentence[i]!=' ') {
      arr[word][j]=sentence[i];
      j++;
    }
    else{
      arr[word][j]='\0';
      word++; j=0;
    }
  }
  arr[word][j]='\0';
  printf("%s\n%s",arr[0],arr[1]);
  return 0;
}
char string[] = "Hasta-la-vista-baby";
char delimiter[] = "-";
char *ptr = NULL;
bool bRandomWord = false;

//first token
ptr = strtok(string, delimiter);

while(ptr != NULL)
{
    printf("Found: %s\n", ptr);
    bRandomWord = Check(ptr); // you'll have to implement this
    if (!bRandomWord)
    {
        // you can copy ptr here to a char[][] using strcpy(_n)
    }
    // next tokens
    ptr = strtok(NULL, delimiter);
}

j
为0时-什么是
kalimat[j-1]
值?您可以尝试左移子字符串:for(i=''直到下一个“”)kalimat[i]=kalimat[i+要删除的单词的长度]。当你到达句子末尾时,用零填充剩余的
将删除随机词
——看起来你每秒钟都删除一个词,而不是随机词。
“Hello asjdas”
也是有效的输出吗?