在进行删除字符串Str中的第n个ch字符时,卡住了,不能继续运行,这是为什么?
#include <stdio.h>
#include <string.h>
unsigned int NumofChar(char * str,char ch)//查找字符串str中有多少个字符ch
{
int count = 0;
while(*str)
{
if(*str == ch)//解引用取出字符与ch比较,指针本身改变
++count;
++str;//使用指针指向每个字符所在的内存位地址
}
return count;
}
char * DelChar(char *str,char ch,unsigned int n)//删除字符串Str中的第n个ch字符
{
char *p=str;
unsigned int a=1,i=1;
while(*str!='\0')
{
if(*str==ch)
{
a++;
for(;1;i++)
{
if(*str!=ch&&a==n)
{
*p++=*str;break;
}
}
}
str++;
}
}
int main(void)
{
char str[200]; // 保存字符串
printf("What sentence do you want to enter?\n");
scanf("%s",str);
getchar();
char ch;
printf("Which character do you want to know\n");
scanf("%c",&ch);
int count=NumofChar(str,ch);
printf("There are %d characters you are looking for.\n",count);
unsigned int n;
printf("What character do you want to remove?\n");
scanf("%d",&n);
getchar();
DelChar(str,ch,n);
printf("The resulting string is");
puts(str);
return 0;
}
仅供参考,谢谢!
#include <stdio.h>
#include <string.h>
unsigned int NumofChar(char *str, char ch) // 查找字符串str中有多少个字符ch
{
int count = 0;
while (*str)
{
if (*str == ch) // 解引用取出字符与ch比较,指针本身改变
++count;
++str; // 使用指针指向每个字符所在的内存位地址
}
return count;
}
void DelChar(char *str, char ch, unsigned int n) // 删除字符串Str中的第n个ch字符
{
char *p = str;
unsigned int a = 0;
while (*str != '\0')
{
if (*str == ch)
{
a++;
if (a == n)
{
*str = '\0';
strcat(p, str + 1);
return;
}
}
str++;
}
}
int main(void)
{
char str[200]; // 保存字符串
printf("What sentence do you want to enter?\n");
scanf("%s", str);
getchar();
char ch;
printf("Which character do you want to know\n");
scanf("%c", &ch);
int count = NumofChar(str, ch);
printf("There are %d characters you are looking for.\n", count);
unsigned int n;
printf("What character do you want to remove?\n");
scanf("%d", &n);
getchar();
DelChar(str, ch, n);
printf("The resulting string is:\n");
puts(str);
return 0;
}
if(*str!=ch&&a==n)这是要干啥呀
删除第n个ch,先要把第n个ch的索引找到,把这个索引后面的所有字符往前面挪一个,就完成了删除
你这逻辑不合逻辑呀
题主代码修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <string.h>
unsigned int NumofChar(char* str, char ch)//查找字符串str中有多少个字符ch
{
int count = 0;
while (*str)
{
if (*str == ch)//解引用取出字符与ch比较,指针本身改变
++count;
++str;//使用指针指向每个字符所在的内存位地址
}
return count;
}
void DelChar(char* str, char ch, unsigned int n)//删除字符串Str中的第n个ch字符 修改 char *
{
char* p = str;
unsigned int a = 0; //unsigned int a = 1, i = 1; 修改
while (*str != '\0')
{
if (*str == ch)
{
a++;
//for (; 1; i++) 修改
//{
if (a == n) //if (*str != ch && a == n) 修改
{
str++; //*p++ = *str; break; 修改
}
//}修改
}
if (*str) //}修改
*p++ = *str++; // 修改
}
*p = '\0'; // 修改
}
int main(void)
{
char str[200]; // 保存字符串
printf("What sentence do you want to enter?\n");
scanf("%s", str);
getchar();
char ch;
printf("Which character do you want to know\n");
scanf("%c", &ch);
int count = NumofChar(str, ch);
printf("There are %d characters you are looking for.\n", count);
unsigned int n;
printf("What character do you want to remove?\n");
scanf("%d", &n);
getchar();
DelChar(str, ch, n);
printf("The resulting string is:");
puts(str);
return 0;
}