有人可以告诉我哪里出错了,如何在C中替换字符串

时间:2012-06-23 10:16:02

标签: c

我正在编写以下代码,以找出给定字符串中存在的必需字符串,如果找到我想用必需的替换它们。我尝试如下,但是为了替换我没有做过可以帮助我

#include <stdio.h>
#include <string.h>
int main(void)
{
char *str;
   const char text[] = "Hello atm adsl";
   const char *arr[] = {"atm", "f/r", "pc","adsl"}; // If found I would like to replace them with Atm, F/R,PC,ADSL
int i=strlen(*arr);
for(int j=0;j<i;j++)
{
    str=arr[j];
   const char *found = strstr(text, arr[j]);
switch(str)
{
    case "Atm":
    break;
}

   puts(found ? "found it" : "didn't see nuthin'");
   return 0;

}
}

我收到以下错误

invalid conversion from const char* to char*switch quantity not an integer

有人可以帮助我

3 个答案:

答案 0 :(得分:1)

C cannot do switch with string.

这可能会回答您的问题:best way to switch on a string in C

答案 1 :(得分:1)

试试这个!!!

 #include <stdio.h>
#include <string.h>

int main(void) {
    char *token;
    char text[] = "Hello atm adsl";
    char *arr[] = {"atm", "f/r", "pc","adsl"}; // If found I would like to replace them with Atm, F/R,PC,ADSL

    char textTmp[500] ="";

    token = strtok (text, " "); // catch single words
    while(token != NULL) {

        printf("%s\n", token);
        if (strncmp(token, arr[0], strlen(arr[0])) == 0) {
            token[0] = 'A';
        }else if (strncmp(token, arr[1], strlen(arr[1])) == 0) {
            token[0] = 'F';
            token[1] = '/';
            token[2] = 'R';
        } else if (strncmp(token, arr[2], strlen(arr[2]))== 0) {
            token[0] = 'P';
            token[1] = 'C';
        } else if (strncmp(token, arr[3], strlen(arr[3]))== 0) {
            token[0] = 'A';
            token[1] = 'D';
            token[2] = 'S';
            token[3] = 'L';
        }
        strncat(textTmp, token, strlen(token));
        strncat(textTmp, " ", 1);
        token = strtok (NULL, " ");
    }

    textTmp[strlen(textTmp)-1] = '\0';

    strncpy(text, textTmp, strlen(textTmp));
    printf("%s\n", text);


    return 0;



}

答案 2 :(得分:0)

  1. 在C中,switch只能用于整数个案 - 因此会出错。

  2. 您的作业str=arr[j]无效,因为您为const char*分配了char *。 C不会按分配值复制...如果要复制const char*的值,然后对其进行更改,则需要malloc自己的strcpy记忆和{{1}}到那里。

相关问题