我正在尝试使程序从用户放入的字符串中删除字符,但是在循环内出现错误。 (旁边的问题:是否在字符串中添加了一个字符,并做了一些小的改动,使“相同”代码?)
PS编程新手...
答案 0 :(得分:0)
这是您要实现的目标吗?
更改:
注意:每次使用scanf()输入后,您必须按Enter键。
int main()
{
char str[100] = { 0 };
char ch[5] = { 0 };
int k, j;
printf("Write text:\n");
scanf("%s", str);
printf("Input was: %s\nLength: %d\n", str, strlen(str));
printf("Write a character that should be removed\n");
scanf("%s", ch);
for (k = 0, j = 0; k < strlen(str); k++)
{
if (str[k] != ch[0]) {
str[j] = str[k];
j++;
}
}
str[j] = '\0';
printf("String after removing a character: %s", str);
}
答案 1 :(得分:0)
这里有两个实现。两者都从字符串font-weight
ch
第一个算法要快得多。第二个慢但容易理解的
str
#include <stdio.h>
#include <string.h>
char *removechar(char *str, int ch)
{
char *cptr = str, *readptr = str;
while(*readptr)
{
if(*readptr == ch)
{
readptr++;
}
else
{
*cptr++ = *readptr++;
}
}
*cptr = 0;
return str;
}
char *removechar(char *str, int ch)
{
char *cpos = str;
while((cpos = strchr(cpos, ch)))
{
strcpy(cpos, cpos + 1);
}
return str;
}
答案 2 :(得分:0)
您的代码有问题:
str[k] != ch
确实是一个字符而不是长度为5的字符数组,则 ch
将是一个有效的测试。这将比较str[k]
的字符值地址为&ch[0]
。
k < str
是在k
初始化的char *
指针而不是在循环索引开头的&str[0]
,则 int
将是有效的比较在0。
更正的代码:
int main(void)
{
char str[100];
char ch[5];
int k, j;
printf("Write text:\n");
//getchar();
fgets(str, 100, stdin);
printf("Input was: %s\n", str);
printf("Write a character that should be removed\n");
//getchar();
fgets(ch, 5, stdin);
for (k = 0, j = 0; k < strlen(str); k++)
{
if (str[k] != ch[0])
{
str[j] = str[k];
j++;
}
}
str[j] = '\0';
printf("String after removing a character = %s", str);
return 0;
}
答案 3 :(得分:-1)
这是您想要实现的吗?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char str[100],c;
printf("Write text:\n");
fgets(str,100,stdin);
printf("Input was: %s\n", str);
printf("Write a character that should be removed\n");
c=getchar();
for(int k=0;k<strlen(str);k++){
if(str[k]==c){
for(int j=k;j<strlen(str);j++){
str[j]=str[j+1];
}
}
}
printf("String after removing a character = %s", str);
return 0;
}