我正在编写一个程序来替换C中用户输入中的字符,但我不知道如何替换某些字符。是否有某种方法可以替换字符串中的字符?如果你知道python,那么我想在python中有类似的东西:
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这样的高级语言来做的。所以,如何替换字符串中的某些字符?
答案 0 :(得分:0)
在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
之类的内容。
答案 1 :(得分:0)
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;
}
答案 2 :(得分:0)
如果你想要用其他字符替换很多字符(比如Caesar cypher),你可以按如下方式为自己建立一个查找:
#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';
这使用了一些技巧:
'a'
- 因为char
实际上只是一个数字,我们现在有a == 0
'\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) {
if(plain[ii] >= 'a' && plain[ii] <= 'z') {
secret[ii] = encoder[plain[ii] - 'a'];
}
else {
secret[ii] = plain[ii];
}
}
secret[n] = '\0';
答案 3 :(得分:0)
没有这样的功能,你必须使用strstr写一个。 如果你可以使用std :: string,你可以使用string.replace()
答案 4 :(得分:-1)
假设您要替换: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');
这只是执行它的逻辑,您需要在代码中添加更多语句。