在C语言中使用符号拆分字符串

在C语言中使用符号拆分字符串,c,string,C,String,我写了一段代码,试图拆分一个长字符串以得到更简单的字符串,这样我就可以对它们进行排序。。。当我从嵌套循环中断时,它是否完全中断到第一个循环 我的输入是“&$(,My,na$me(is)” 我想要的输出是“我的na me is” 我怎样才能解决这个问题 #include <stdio.h> #include <string.h> #include <ctype.h> int main(){ char splitter[100]; char my

我写了一段代码,试图拆分一个长字符串以得到更简单的字符串,这样我就可以对它们进行排序。。。当我从嵌套循环中断时,它是否完全中断到第一个循环

我的输入是“&$(,My,na$me(is)”

我想要的输出是“我的na me is” 我怎样才能解决这个问题

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

int main(){
    char splitter[100];
    char mystring[1000];
    char newstring[1000][1000];
    int i,j,z,k=0;

    scanf("%s", splitter);
    scanf("%s", mystring);

    for (i=0; i<1000; i++){
        for (j=k; j<1000; j++){
            for (z=0; z<100; z++){
                if (mystring[j]==splitter[z]){
                    k++;
                    break;
                }
                else
                {
                    newstring[i][j]=mystring[j];
                }
            }
            if (mystring[j]==splitter[z])
                break;
        }
    }

    for (i=0; i<10; i++){
        printf("%s ", newstring[i]);
    }

    return 0;
}
#包括
#包括
#包括
int main(){
炭分离器[100];
char mystring[1000];
char newstring[1000][1000];
int i,j,z,k=0;
scanf(“%s”,拆分器);
scanf(“%s”,mystring);

对于(i=0;i首先;C不是Python,不能只使用缩进来表示块,必须使用大括号,即
{
}

第二,没有一个
break
只打断最接近它的循环,没有办法
break
超出多个级别

第三,您在字符串上循环,好像它们总是100个字符长,而它们并不总是100个字符长(例如,在您的示例中,它们不是)。这是错误的,您应该使用
strlen()
来计算它们的长度

第四,您应该检查
scanf()
调用的返回值,因为它可能会失败


第五,
newstring
被声明为数组数组,即一个巨大的1兆字节2D“正方形”字符,这显然不是您使用它的方式。

首先;C不是Python,您不能只使用缩进来表示块,您必须使用大括号,即
{
}

第二,没有一个
break
只打断最接近它的循环,没有办法
break
超出多个级别

第三,您在字符串上循环,好像它们总是100个字符长,而它们并不总是100个字符长(例如,在您的示例中,它们不是)。这是错误的,您应该使用
strlen()
来计算它们的长度

第四,您应该检查
scanf()
调用的返回值,因为它可能会失败


第五,
newstring
被声明为数组数组,即一个巨大的1M字节2D“正方形”字符,这显然不是你使用它的方式。

虽然你的代码中有很多错误,我无法找出你为什么要犯这些错误。例如,我不明白你为什么要扫描两个数组,为什么要使用二维数组。我想告诉你的另一件事是,当t中有空格时,scanf不起作用根据你的问题,这里有一个非常简单的解决方法

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

int main(){
char splitter[100];
char mystring[1000];
char newstring[1000][1000];
int i,j,z,k=0;

gets(splitter);

for(i=0;i<strlen(splitter);++i){
      if(((splitter[i])>=65 &&(splitter[i]<=90)) || ((splitter[i]>=97)&&(splitter[i]    <=122)))
        mystring[k++]=splitter[i];
else
    mystring[k++]=' ';
 }
 printf("%s\n",mystring);
  //scanf("%s", mystring);


 return 0;
}
#包括
#包括
#包括
int main(){
炭分离器[100];
char mystring[1000];
char newstring[1000][1000];
int i,j,z,k=0;
获取(拆分器);

对于(i=0;i=65&&(拆分器[i]=97)&&(拆分器[i]虽然你的代码中有很多错误,但我无法找出你为什么要犯这些错误。例如,我不明白你为什么要扫描两个数组,为什么要使用二维数组。我想告诉你的另一件事是,当字符串中有空格时,scanf不起作用。根据你的问题,这里是非常简单的s解决方案

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

int main(){
char splitter[100];
char mystring[1000];
char newstring[1000][1000];
int i,j,z,k=0;

gets(splitter);

for(i=0;i<strlen(splitter);++i){
      if(((splitter[i])>=65 &&(splitter[i]<=90)) || ((splitter[i]>=97)&&(splitter[i]    <=122)))
        mystring[k++]=splitter[i];
else
    mystring[k++]=' ';
 }
 printf("%s\n",mystring);
  //scanf("%s", mystring);


 return 0;
}
#包括
#包括
#包括
int main(){
炭分离器[100];
char mystring[1000];
char newstring[1000][1000];
int i,j,z,k=0;
获取(拆分器);
对于(i=0;i=65&&(拆分器[i]=97)&&(拆分器[i]请检查以下代码:

int main()
{
   int i=0,j=0,t,f=0;
   char s[20];
   char b[20];
   printf("Enter the string\n");
   scanf("%s",&s);
   while(s[i] != '\0')
   {   
      t = s[i]; 
      if((t>=65 && t<=90) || (t>= 97 && t<=122))
      {
         b[j++] = s[i];
         f = 1;
      }
      else
      {
         if(f)
         b[j++] = ' ';
      }
      i++;
   }   
   b[j] = '\0';
   printf("%s\n",b);
   return 0;
}
intmain()
{
int i=0,j=0,t,f=0;
chars[20];
charb[20];
printf(“输入字符串\n”);
scanf(“%s”、&s);
而(s[i]!='\0')
{   
t=s[i];
如果((t>=65&&t=97&&t检查以下代码:

int main()
{
   int i=0,j=0,t,f=0;
   char s[20];
   char b[20];
   printf("Enter the string\n");
   scanf("%s",&s);
   while(s[i] != '\0')
   {   
      t = s[i]; 
      if((t>=65 && t<=90) || (t>= 97 && t<=122))
      {
         b[j++] = s[i];
         f = 1;
      }
      else
      {
         if(f)
         b[j++] = ' ';
      }
      i++;
   }   
   b[j] = '\0';
   printf("%s\n",b);
   return 0;
}
intmain()
{
int i=0,j=0,t,f=0;
chars[20];
charb[20];
printf(“输入字符串\n”);
scanf(“%s”、&s);
而(s[i]!='\0')
{   
t=s[i];
如果((t>=65&&t=97&&t
#包括
#包括
int main(){
炭分离器[100];
char mystring[1000];
字符*代币[500];
字符*令牌;
int i=0;
scanf(“%99[^\n]%*c”,拆分器);
scanf(“%999[^\n]”,mystring);
令牌=strtok(mystring,splitter);
while(令牌){
如果(i)
putchar(“”);
printf(“%s”,标记);
令牌[i++]=令牌;
令牌=strtok(空,拆分器);
}
putchar('\n');
返回0;
}
#包括
#包括
int main(){
炭分离器[100];
char mystring[1000];
字符*代币[500];
字符*令牌;
int i=0;
scanf(“%99[^\n]%*c”,拆分器);
scanf(“%999[^\n]”,mystring);
令牌=strtok(mystring,splitter);
while(令牌){
如果(i)
putchar(“”);
printf(“%s”,标记);
令牌[i++]=令牌;
令牌=strtok(空,拆分器);
}
putchar('\n');
返回0;
}

请正确缩进代码。请注意,在堆栈大小小于等于1 MB的环境中(例如WIN32),此操作将失败。为什么要使用两个字符串拆分器和mystring。?尝试使用goto关键字!!@AadilAhmad,因为拆分器接收的输入最多可以是用于拆分字符串的数百个符号,而mystring最多可以容纳1000个字符。请正确缩进代码。请注意,在re堆栈大小为1 MB或更小(例如WIN32)。为什么要使用两个字符串拆分器和mystring。?尝试使用goto关键字!!@AadilAhmad,因为拆分器接收的输入最多可以是用于拆分字符串(mystring,也可以容纳1000个字符)的数百个符号