C 删除字符数组中的非字母字符
我想删除/替换字符数组中的非字母字符,但不是删除它,而是用空格替换它。 例如,如果我输入hello123hello,它将输出为hello hello。 我希望它以hellohello的形式输出,而不需要额外的空格C 删除字符数组中的非字母字符,c,arrays,C,Arrays,我想删除/替换字符数组中的非字母字符,但不是删除它,而是用空格替换它。 例如,如果我输入hello123hello,它将输出为hello hello。 我希望它以hellohello的形式输出,而不需要额外的空格 #include <stdio.h> #include <ctype.h> #include <string.h> int main() { char input[80]; char output[80]; printf(
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main()
{
char input[80];
char output[80];
printf("> ");
scanf("%s", &input);
int i = 0;
while (i < sizeof(input))
{
if (input[i] != '\0' && input[i] < 'A' || input[i] > 'z')
input[i] = ' ';
{
i++;
}
}
printf("= %s\n", input);
return 0;
}
#包括
#包括
#包括
int main()
{
字符输入[80];
字符输出[80];
printf(“>”);
scanf(“%s”,&input);
int i=0;
而(i'z')
输入[i]='';
{
i++;
}
}
printf(“=%s\n”,输入);
返回0;
}
如果确实要从数组中删除字符,则必须将索引较高的所有字符下移一步,以覆盖要替换的字符
如果你只是想打印结果,那么一次打印一个“通过”的字符,而不打印其余的字符会更容易
另外,您应该使用
中的isalpha()
来检查字符是否为字母,您的代码非常不可移植,因为它假定编码有奇怪的地方。不要这样做。你的第一项工作是用替换输入[i]<'A'| |输入[i]>'z'
!IsAlga(输入[i]):对于真正的可移植C和C++,不能假设ASCII编码,即使在ASCII中,大写和小写部分也不“触摸”。
如果你想真正删除字符,你应该向后循环运行。 你可能想考虑一种更为C++的方式来做:
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
int main() {
string s;
getline(cin, s);
s.erase(remove_if(begin(s), end(s), [](char c){ return !isalpha(c); }));
cout << s << endl;
}
#包括
#包括
#包括消除输入上的长度超限问题
检查字符是否按字母顺序排列
这个成语为你处理棘手的左移
您可以按如下方式修改程序:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main()
{
char input[80];
char output[80];
printf("> ");
scanf("%s", &input);
int i = 0;
int j = 0;
while (i < sizeof(input))
{
if (isalpha(input[i]))
{
input[j] = input[i];
++j;
}
++i;
}
input[j-1] = '\0';
printf("= %s\n", input);
return 0;
}
#包括
#包括
#包括
int main()
{
字符输入[80];
字符输出[80];
printf(“>”);
scanf(“%s”,&input);
int i=0;
int j=0;
而(i
为什么要将i++
放在花括号内?这里完全混淆了,因为它看起来像是多行if
的一部分。你能不能让这个变得不可读?C还是C++?您实际使用的是哪一个?@EdHeal:A)
将出现语法错误。这是围绕i++
的额外的、冗余的块范围,这太愚蠢了,我的头很痛。没有认真的,你可能会考虑阅读一本好的C++书籍,因为有很多与C++无关的东西。C样式字符串而不是std::string
,
而不是
。基本上不是C++。UVD:我不知道一个编码,它的大写字母和小写字母正好在一起。很小的注释:问题现在被标记为C++(它可能也被标记C++之前,不确定),所以也许<代码> <代码>而不是<代码> <代码>?@ AdvavoRy是的,但是我认为C++是一个错误标记。我不认为OP是使用C++的。@ unWrun-OP使用杂种C/C++。