如何替换C中的某个字符
我正在编写一个程序,用C语言替换用户输入的字符,但我不知道如何替换某些字符。有没有一种C语言的方法可以替换字符串中的字符?如果您了解python,那么我希望python中有点类似这样的内容:如何替换C中的某个字符,c,C,我正在编写一个程序,用C语言替换用户输入的字符,但我不知道如何替换某些字符。有没有一种C语言的方法可以替换字符串中的字符?如果您了解python,那么我希望python中有点类似这样的内容: string.replace('certain_character','replacement_character') 类似的东西,除了C,而不是python。 这是我迄今为止编写的代码: #include <stdio.h> int main(){ char str[BUFSIZ]; p
string.replace('certain_character','replacement_character')
类似的东西,除了C,而不是python。
这是我迄今为止编写的代码:
#include <stdio.h>
int main(){
char str[BUFSIZ];
printf("Welcome To My Secret Language encoder!Enter some text: \n");
scanf("%s",str);
/*
Where I want to replace certain characters
*/
printf("Here is your text in secret language mode: %s \n",str);
}
我写这段代码是为了进一步学习C语言,这就是为什么我不使用python这样的高级语言。那么,如何替换字符串中的某些字符呢?在C语言中没有类似的内容。您必须自己扫描字符串:
#include <string.h>
char str[] = "I love cats";
int i;
for(i = 0; i < strlen(str); i++)
{
if(str[i] == 'c')
str[i] = 'b';
}
现在,如果您正在寻找一个子字符串,您将需要类似strstr的东西。假设您要替换:a为z,b为X
char *replace(char *src, int replaceme, int newchar)
{
int len=strlen(src);
char *p;
for(p=src; *p ; p++)
{
if(*p==replaceme)
*p=newchar;
}
return src;
}
用法:
replace(string, 'A', 'z');
replace(string, 'b', 'X');
这只是执行此操作的逻辑,您需要在代码中包含更多语句。strchr在字符串中查找给定字符,或返回NULL
int main() {
int c;
while ( ( c = getchar() ) != EOF ) {
char const * found, * source = "abc", * dest = "xyz";
if ( ( found = strchr( "abc", c ) ) != NULL ) {
putchar( dest[ found - source ] );
} else {
putchar( c );
}
}
return 0;
}
如果您有许多字符要替换为其他字符,如凯撒密码,您可以按如下方式为自己构建查找:
#include <string.h>
char plain[] = "Hello there good people";
char encoder[26] = "ghijklmnopqrstuvwxyzabcdef";
char secret[100]; // long enough
int n = strlen(plain);
for(ii = 0; ii < n; ++ii) {
secret[ii] = encoder[(tolower(plain[ii]) - 'a')%26];
}
secret[n] = '\0';
没有这样的函数,您必须使用strstr编写一个函数。
如果可以使用std::string,则可以使用string.replaceBUFSIZ是指stdio使用的I/O缓冲区大小。它依赖于实现,并不总是准确的。你应该指定你自己的缓冲区大小,或者更好地,使用一个循环。如果你愿意使用STL,如果你正在学习C++,那么强烈建议你在StActOpjs:嗨,吉姆,这样的问题。在以下示例中,调用replace时出现总线错误:char*string=aAbBcC;替换字符串'A','z';跟进。。。声明并初始化字符字符串[7]=aAbBcC;避免错误。我的错。C1x告诉我们修改这样的字符串将导致未定义的行为。你的代码是可靠的。干杯。你可以用char*something=我的字符串;作为一个真正的const char…-指向只读内存。你已经明白了。你为什么要用int而不是char来向函数传递字符?是因为堆栈上的参数已经对齐了吗?@Floris是的。您可能已经注意到std C库的头执行相同的ex:ctypes.h:int\u EXFUNisalnum,int\u C;gcc 4.8.2中,参数仍然保持一致。
#include <string.h>
char plain[] = "Hello there good people";
char encoder[26] = "ghijklmnopqrstuvwxyzabcdef";
char secret[100]; // long enough
int n = strlen(plain);
for(ii = 0; ii < n; ++ii) {
if(plain[ii] >= 'a' && plain[ii] <= 'z') {
secret[ii] = encoder[plain[ii] - 'a'];
}
else {
secret[ii] = plain[ii];
}
}
secret[n] = '\0';