在C语言中使用符号拆分字符串
我写了一段代码,试图拆分一个长字符串以得到更简单的字符串,这样我就可以对它们进行排序。。。当我从嵌套循环中断时,它是否完全中断到第一个循环 我的输入是“&$(,My,na$me(is)” 我想要的输出是“我的na me is” 我怎样才能解决这个问题在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
#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个字符)的数百个符号