如何替换C中的某个字符

时间:2013-12-15 04:06:39

标签: c

我正在编写一个程序来替换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这样的高级语言来做的。所以,如何替换字符串中的某些字符?

5 个答案:

答案 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';

这使用了一些技巧:

  1. 将所有字符转换为小写
  2. 从小写的数字中减去'a' - 因为char实际上只是一个数字,我们现在有a == 0
  3. 对结果执行模运算,使超出好字符范围的事物不会导致内存访问错误。
  4. 在末尾添加'\0'以确保字符串正确终止。
  5. 将内容复制到新字符串中;显然你可以做一次就地替换。
  6. 如上所述,这会将数字(数字)和标点符号/符号/空格转换为字符。您可以决定保留任何不是字母的内容 - 也许只会转换小写字母。在那种情况下

    #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');

这只是执行它的逻辑,您需要在代码中添加更多语句。