我想编写一个 C++ 程序来接受用户输入的句子并删除所有空格。有错误。
\n输入:ad jq jjwjfwwf
输出:ad\xe2\x96\x80jq
输入:dadad fff
输出:dadad
#include<iostream>\nusing namespace std;\n//using while loop to copy string\nint main(){\n int i=0;\n int j=0;\n char c[30];\n char cc[30];\n char ccc[30];\n cin.getline(c,30);\n while (c[i]!='\\0')\n {\n cc[i]=c[i];\n i++;\n }\n cc[i]='\\0'; \n for (j=0;j<i;j++){\n if (c[j]==' ')\n {\n continue;\n }\n if (c[j]=='\\0')\n {\n break;\n }\n ccc[j]=c[j]; \n }\n ccc[j]='\\0';\n cout<<cc<<'\\n'<<ccc<<endl;\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n 我只需要计算字符串中的句点 (.)。为此,我使用库ispunct中的函数ctype.h。我不想计算逗号 (,),也不想计算感叹号 (!)。
我怎样才能只计算一个周期?
当我使用ispunctctype 库中的函数时,我的程序会计算句点 (.)、逗号 (,) 和感叹号。
可能重复:
为什么我不能编辑char*中的char?
char *k ;
void ffill()
{
char *d="ddddd";
*k=*d; //expecting to copy "ddddd" to *k
cout<<k<<"\n";
*d[1]=5; // trying to change array element
cout<<k<<"\n";
}
int _tmain(int argc, _TCHAR* argv[])
{
ffill();
cout<<k<<"\n";
}
Run Code Online (Sandbox Code Playgroud)
过程填充借助局部变量初始化字符数组k.我不确定它复制"ddddd"变量指针(这是错误的,因为在自动销毁d存储器后不安全)或它复制值并在此之后*k正确初始化.
如何aces *d数组元素?编译器不高兴*d[1]=5;
免责声明:作为一个自称为C++的菜鸟,我可能做了一个愚蠢的疏忽.请不要生气;)
无论如何,我正在尝试创建一个函数,将大写cstring的每个单独字符转换为int(a = 1,b = 2,...),然后将这些值相乘.这是我的代码:
int product(char s[]) {
int curProd = 1;
for (size_t i = 0; i < strlen(s);++i) {
if (s[i] = 'A') {
curProd = curProd * 1;
}
if (s[i] = 'B') {
curProd = curProd * 2;
}
if (s[i] = 'C') {
curProd = curProd * 3;
}
Run Code Online (Sandbox Code Playgroud)
等等等等.我试着测试一下
int main() {
char x[] = "HI";
printf("%d",product(x));
return(0);
}
Run Code Online (Sandbox Code Playgroud)
运行时,输出为0.有人能告诉我这段代码有什么问题吗?
最初的问题得到了很严重的接受并得到了许多支持.所以我认为我会修改这个问题,以便更容易阅读,并希望能够为任何看到它的人提供更多帮助.最初的问题是为什么strlen()比手动循环字符串并找到'\ 0'字符要快20倍.我认为这个问题是有根据的,因为在任何地方我都会读到strlen()找到字符串长度的技术本质上是循环的,直到它找到一个空终止字符'\ 0'.这是对C字符串的常见批评,原因多于一个.正如许多人所指出的那样,作为C库一部分的函数是由智能程序员创建的,以最大限度地提高性能.
感谢ilen2,他将我与一个非常聪明的方法联系使用按位运算符一次检查8个字节,我设法得到一些东西,大于大约8到15个字符的字符串比strlen()运行得快,并且很多当字符串相当大时,比strlen()快许多倍.例如,奇怪的是,strlen()似乎是线性时间依赖于要完成的字符串的长度.另一方面,无论字符串长度(我测试了几百个),自定义的时间几乎相同.无论如何,我的结果是相当令人惊讶的,我做了他们优化关闭,我不知道他们是多么有效.非常感谢ilen2的链接和John Zwinck.有趣的是,John Zwinck建议SIMD可能为什么strlen()可能更快,但我对此一无所知.
我正在尝试打印 char * name;
我试过了
fprintf(stderr,"%c",* name)
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。我的推理是因为 name 是一个字符指针,所以我可以使用 * 来获取指针的值。
它给出了错误错误:格式指定类型“char *”但参数的类型为“char”
我知道当我们宣布一种char *c ="Hello";手段,我们不能修改这个字符串.但是为什么我能够在C中修改这个字符串数组.
char *p [] = {"Hello","World"};
*p = "Mode";
Run Code Online (Sandbox Code Playgroud)
试图修改它不应该给我一个错误吗?
我刚刚开始学习C并想问一些非常基本的问题.我根本没有任何编程背景.我只是在教程的开头(http://www.cprogramming.com/tutorial/c-tutorial.html),并且有些事情没有解释.例如,在下面的介绍性简单程序中......
问题:为什么他使用"%d" - 为什么d而不是另一封信?我理解%是模数操作数,意思是余数,但为什么d?据我所知,stdio.h导入了一个要使用的术语库/术语表,比如printf等......是不是和%d相同?:
#include <stdio.h>
int main()
{
int this_is_a_number;
printf( "Please enter a number: " );
scanf( "%d", &this_is_a_number );
printf( "You entered %d", this_is_a_number );
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在努力写一个char *作为参数传递。我想从函数write_char()向char *写一些字符串。使用以下代码,我遇到了分段错误。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void write_char(char* c){
c = (char*)malloc(11*(sizeof(char)));
c = "some string";
}
int main(){
char* test_char;
write_char(test_char);
printf("%s", test_char);
return 0;
}
Run Code Online (Sandbox Code Playgroud)