转换字符串C中的字符

时间:2015-05-25 16:57:28

标签: c string

我正在制作一个程序来改变用户的一个词或多个单词(最多100个字符)。例如,如果用户输入dakka dakka,他们就会打印出@ kk @ d @ kk @。我做错了什么,它只打印我输入的第一个字。

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

int main()
{
 char utext[100];
 int i, len;
 char c;

 len = strlen(utext);

 printf("type in your message to be converted: \n");
 fgets( utext, 100, stdin );

 for ( i = 0; i < len; ++i )
  {
  c = utext[i];

  if (c == 'a')
   c = '@';
 printf("%c", c);
  }

return 0;
}

2 个答案:

答案 0 :(得分:1)

您正在未经初始化的数组上调用strlen()

strlen()功能会在您致电'\0'之前搜索不在utext的终止fgets()

此外,您不想迭代100个字符,如果您使用strlen()更改sizeof(),这将会完成,因为这将为您提供数组的大小(以字节为单位) ,原因

fgets(utext, sizeof(utext), stdin);

没关系,不仅好,它更好,因为现在你可以改变数组的大小,而无需改变这一行。

对于for循环,我建议使用两个事实

  1. fgets()读取按下 Enter 时用户插入的尾随'\n',几乎是强制性的。

  2. 任何有效的c字符串,即在传递给strlen()时会返回它的长度的字符串,必须有一个终止'\0',所以如果'\n'不是由于某种原因出现,然后是'\0'

  3. 从上述两点来看,for循环应该看起来像

    for (i = 0 ; ((utext[i] != '\n') && (utext[i] != '\0')) ; ++i)
     {
        c = utext[i];
        if (c == 'a')
            c = '@';
        printf("%c", c);
     }
    

答案 1 :(得分:1)

您可以考虑通过字符阅读,然后您甚至不必存储字符串。像这样的代码可以工作:

int c;
while((c = getchar()) != EOF)
{
    if(c == 'a')
        printf("@");
    else
        printf("%c", c);
}