语言:C
我正在尝试编写一个C函数,它使用头文件char*strrev2(const char*string)作为面试准备的一部分,最接近(工作)的解决方案如下,但是我想要一个不包含malloc的实现...这可能吗?因为它返回一个字符意味着如果我使用malloc,则必须在另一个函数中使用free.
char *strrev2(const char *string){
int l=strlen(string);
char *r=malloc(l+1);
for(int j=0;j<l;j++){
r[j] = string[l-j-1];
}
r[l] = '\0';
return r;
}
Run Code Online (Sandbox Code Playgroud)
[编辑]我已经使用缓冲区编写实现而没有char.谢谢你!
我的任务是使用C将数据文件从big endian转换为little endian,反之亦然。反之,我已经在网上寻找了大约3个小时的其他示例并阅读了我的教科书,但是我对如何开始这一工作非常执着功能。
到目前为止,我的事件顺序是正确的(1到4),但是在convert_and_save函数内部我是否必须使用创建一个char数组?char buffer[4];?
有人可以帮帮我吗?即使您只是提供有关查找内容的线索,我也将不胜感激。
我需要写一个函数:
void convert_and_save(struct record item, FILE * output_handle, int number);
Run Code Online (Sandbox Code Playgroud)
在此函数中,我执行以下一系列步骤:
使用以下方法将整数转换为字符数组:
int integer_to_characters(int number, char * buffer)
{
memcpy(buffer, &number, 4);
}
Run Code Online (Sandbox Code Playgroud)反转该数组中字符的顺序。
使用以下方法将字符数组转换回整数:
int characters_to_integer(char * buffer)
{
int result;
memcpy(&result, buffer, 4);
return result;
}
Run Code Online (Sandbox Code Playgroud)使用以下命令将转换后的记录写入输出文件:
void save_record(FILE * file_handle, struct record a)
{
char output_buffer[size_of_record];
integer_to_characters(a.age, &(output_buffer[0]));
memcpy(&(output_buffer[4]), a.name, 12);
integer_to_characters(a.department, &(output_buffer[16]));
fwrite(output_buffer, sizeof(char), size_of_record, file_handle);
}
Run Code Online (Sandbox Code Playgroud)#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1;
cin>>s1;
int n=s1.size();
string s2;
for(int a=0;a<n;a++)
{
s2[a]=s1[n-1-a];
}
cout<<s2;
}
Run Code Online (Sandbox Code Playgroud)
但是我没有得到任何输出,但我可以打印反转字符串的元素.任何人都可以帮忙.
在最近的一次采访中,我被问到一个非常简单的问题,即在没有任何额外变量和任何内置函数的情况下反转字符串(不仅仅是打印).我能想到的最接近的是:
#include<stdio.h>
#include<string.h>
int main()
{
char ch[100];
scanf("%s",&ch);
int i=0;
while(i<strlen(ch)/2)
{
ch[i]=ch[strlen(ch)-1-i]+ch[i];
ch[strlen(ch)-1-i]=ch[i]-ch[strlen(ch)-1-i];
ch[i]=ch[i]-ch[strlen(ch)-1-i];
i++;
}
printf("%s",ch);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用变量时拒绝了我的解决方案i.如果不使用计数器变量,这怎么可能呢?有没有其他方法可以解决这个问题?
编辑
这些是确切的问题(无论或多或少):
在C中不使用任何变量或内置函数来反转字符串.
我想在不使用循环的情况下反转字符串。我的循环代码如下所示:
#include <iostream>
#include <string>
using namespace std;
string reverseString(string str) {
string changedString;
int strLength = int(str.length() - 1);
for(int i {strLength}; i >= 0; i--) {
changedString.push_back(str.at(i));
}
return changedString;
}
int main() {
string str;
cout << "Enter a string to reverse it:\n" << flush;
cin >> str;
cout << reverseString(str) << flush;
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要编写一个没有循环的函数。仅应使用String方法。您能帮我解决这个问题吗?
我从main(C代码)调用Chris Conway提供的函数(如何在C或C++中反转字符串?).当我使用cygwin运行这个程序时,程序在while循环中崩溃(注释它破坏的行).你能解释一下这里出了什么问题.谢谢
#include <stdio.h>
#include <string.h>
void strrev(char* z);
int main()
{
char *a;
printf("before reverse: %s\n", a);
strrev(a); // function provided by Chris Conway
printf("after reverse: %s\n", a);
return 0;
}
void strrev(char *str) {
char temp, *end_ptr;
/* If str is NULL or empty, do nothing */
if( str == NULL || !(*str) )
return;
end_ptr = str + strlen(str) - 1;
/* Swap the chars */
while( end_ptr > str ) {
temp = *str; …Run Code Online (Sandbox Code Playgroud) 我是初学者,我一直在读一本关于C++的书,我正在写一个关于函数的章节.我写了一个来反转一个字符串,将它的副本返回给main并输出它.
string reverseInput(string input);
int main()
{
string input="Test string";
//cin>>input;
cout<<reverseInput(input);
return 0;
}
string reverseInput(string input)
{
string reverse=input;
int count=input.length();
for(int i=input.length(), j=0; i>=0; i--, j++){
reverse[j]=input[i-1];
}
return reverse;
}
Run Code Online (Sandbox Code Playgroud)
以上似乎都有效.更改以下代码时会发生此问题:
string input="Test string";
Run Code Online (Sandbox Code Playgroud)
至:
string input;
cin>>input;
Run Code Online (Sandbox Code Playgroud)
在此更改之后,反向函数仅返回第一个输入字的反转,而不是整个字符串.我无法弄清楚我哪里出错了.
最后,是否有更优雅的方法通过使用引用来做到这一点,而无需复制输入,以便输入变量本身被修改?
我试图在C++中反转char数组.这是我的代码:
void reverse(char s[]);
int main()
{
char s [] = "Harry";
cout << reverse(s) << endl;
system("PAUSE");
return 0;
}
void reverse(char s[])
{
if( strlen( s ) > 0 ) {
char* first = &s[ 0 ];
char* last = &s[ strlen( s ) - 1 ];
while( first < last ) {
char tmp = *first;
*first = *last;
*last = tmp;
++first;
--last;
}
return;
}
Run Code Online (Sandbox Code Playgroud)
但是,我在cout << reverse(s)<< endl; 位于main方法中的那行,我不知道为什么.错误消息是没有操作符匹配这些操作数.有人可以帮我解决这个问题吗?
提前致谢.
在仅使用库的c ++中,用c-string反转的最快方法是什么?特别是,是否有任何方法需要少于O(strlen)时间?
我试图用函数和一些指针反转一个字符串,但我无法获得更新原始字符串的函数.
#include <stdio.h>
#include <string.h>
void rev(char* string)
{
char str2[strlen(string)];
char *p1;
char *p2;
p1 = string + strlen(string)-1;
p2 = str2;
while(p1 >= string)
*p2++ = *p1--;
*p2 = '\0';
p2 = p2 - strlen(string);
string = p2; // This codesn't seem to update s1 or s2
}
int main(void)
{
char s1[100] = "What does the fox say?";
char s2[100] = "Titanic sinks";
rev(s1);
rev(s2);
printf("\n\n%s\n", s1);
printf("%s\n", s2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
功能有效但我无法获取main中的字符串以更新反向字符串.Imo string = p2应该将字符串更新为它的反转值.它确实如此,但仅限于功能内,而不是主功能......